【发布时间】: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