我知道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
必须返回的例子?
答案 0 :(得分:4)
您可以在<a>
元素中尝试引用您的网址,因为这就是HTML的编写方式。
您也可以尝试通过parseUri()
,PackageManager
和queryIntentActivities()
确认,如果您生成的网址解析为某些内容 - 如果没有,则表示存在问题URL。
Here is a sample project显示URI_INTENT_SCHEME
的使用情况,以防它为您提供任何想法。
答案 1 :(得分:3)
使用零标志用自定义方案创建URI。 Intent.URI_INTENT_SCHEME
标志强制使用“intent:”方案(以及整体意图URI疯狂语法)。
String customUri = customIntent.toUri(0);