【问题标题】:Launching my app using the intent URI使用意图 URI 启动我的应用程序
【发布时间】:2011-04-03 15:00:12
【问题描述】:

我知道这已经在 StackOverflow 中被问过很多次了,但我还没有找到解决方案。我的应用程序会发送一封电子邮件,其中包含一个链接,单击该链接应启动该应用程序。

根据@hackbod 的说法,最好的方法是使用 Intent URI(请参阅this)。这是我设置意图并将其放入电子邮件正文的代码:

Intent customIntent = new Intent(CUSTOM_ACTION);
customIntent.setPackage(MY_PACKAGE);
customIntent.addCategory(MY_CAT_BROWSABLE);
customIntent.addCategory(MY_CAT_DEFAULT);

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);

String emailBody = getString(R.string.intent_link, customUri);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_SUBJECT, "Recommending vid");
intent.putExtra(Intent.EXTRA_TEXT   , Html.fromHtml(emailBody));
try {
    startActivity(Intent.createChooser(intent, "Choose email client:"));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

这是我从 LogCat 得到的:

08-25 17:01:23.333: VERBOSE/Test URI(16987): intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end
08-25 17:01:23.338: VERBOSE/Test email text(16987): Hi,<br><br>Testing intents from an email.<br><br> A standard website: <a href=http://www.google.com>Go to Google</a>.<br><br> This link should launch the app: <a href=intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end>Click link to launch</a>.

当我使用 GMail 应用查看手机中的电子邮件时,我可以点击 Google 链接并启动浏览器,这没问题。

但意图的链接甚至不可点击(从草稿看来,它应该是可点击的)。有没有人试过这个并让它工作?

编辑 #1:我也尝试将操作设置为 Intent.ACTION_VIEW,但链接仍然不可点击。

编辑#2:显然,链接真的可点击的。我尝试使用另一个电子邮件客户端,链接是可点击的!似乎GMail中有一个错误。那好吧。但显然,这比我想象的要难。我尝试使用:

Uri.Builder builder = new Uri.Builder();
builder.scheme("my.own.scheme");
builder.authority("my.authority");
Uri newUri = builder.build();
Intent customIntent = new Intent(CUSTOM_ACTION, newUri);

按照@CommonsWare 的建议,我尝试检查是否有此customIntent 的接收者。显然有一个,这是我所期待的。所以下一步是把这个意图变成一个我可以在电子邮件中使用的 URI。我用过:

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);

根据我对文档的理解,它应该给我一些类似于通常的 http 链接的东西,只是方案设置为 intent。然后我可以使用这个customUri 作为电子邮件中链接的值。但是,看起来情况并非如此。有人有.toUri 必须返回的示例吗?

【问题讨论】:

  • 这有点长,但我想我找到了问题所在。这是我希望生成链接的意图:Intent { act=com.test.project.action.CUSTOM_ACTION dat=com.test.project://my.authority }。相反,当我单击电子邮件中的链接时,我得到了这个意图:Intent { act=android.intent.action.VIEW dat=intent://my.authority#Intent;scheme=com.test.project;action=com.test.project.action.CUSTOM_ACTION;end (has extras) }。根据 Intent.parseUri(String uri, int flags) 文档,电子邮件客户端将我的 URI 解释为由 toUri() 生成的 NOT。我的假设正确吗?
  • 您是否能够使其正常工作?解决方案是什么?谢谢!
  • @hopia 我已经很久没有再尝试过了。您可以查看下面我和 CommonsWare 之间的 cmets,以查看我在调查期间的发现。您也可以尝试下面的较新答案(尚未尝试过)。 :)
  • 是的,我只是尝试了这些建议,但似乎没有一个有效。我开始思考意图:android 浏览器不支持方案。我实际上可以通过 adb shell 从命令行启动活动 am start "intent:#Intent;action=...."

标签: android email uri android-intent


【解决方案1】:

您可以尝试在 &lt;a&gt; 元素中的 URL 周围加上引号,因为 HTML 应该是这样编写的。

您也可以尝试通过parseUri()PackageManagerqueryIntentActivities() 确认生成的 URL 是否解析为某些内容 - 如果没有解析,则说明该 URL 有问题。

Here is a sample project 展示了URI_INTENT_SCHEME 的用法,以防它给你任何想法。

【讨论】:

  • (哎呀,上面的格式有问题)。将检查您的 URL 处理程序链接,谢谢!但我认为一旦我获得可点击的链接,我将面临这个障碍。还将尝试验证 URL,让您知道。 :) 一如既往的感谢! :)
  • @Zarah:我的意思是,如果 Android 找不到任何可以处理点击的内容,则该链接可能无法点击。
  • @CommonsWare:我尝试切换用于检查邮件的电子邮件应用程序,而不是使用 GMail 应用程序,而是尝试使用手机中的内置应用程序。毕竟,链接是可点击的。但你是对的,看起来操作系统不知道处理点击的活动/包。我收到网页不可用屏幕。
  • 这些是我对此的发现,也许我做错了什么或遗漏了什么,我不知道是什么。在做.toUri 之前,我尝试检查是否有接收者的意图。操作系统找到了意图接收者,因此我继续将其放入电子邮件正文中。但是,当我单击电子邮件中的链接时,仍然出现网页不可用屏幕。对我来说似乎很矛盾。你知道为什么吗?
【解决方案2】:

使用零标志使用您的自定义方案创建 URI。 Intent.URI_INTENT_SCHEME 标志强制使用“intent:”方案(以及整体意图 URI 疯狂语法)。

String customUri = customIntent.toUri(0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多