android - 使用 Intent URI 启动我的应用程序

标签 android email uri android-intent

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

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

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 链接并启动浏览器,没问题。

但 Intent 的链接甚至不可点击(虽然从草稿看来它应该是可点击的)。有没有人试过这个并成功了?

From draft: link looks clickable Sent email: link not clickable

编辑 #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 的接收者。显然有一个,这是我所期待的。所以下一步是将这个 Intent 变成我可以在电子邮件中使用的 URI。我用过:

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

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

最佳答案

您可以尝试在您的 <a> 中将您的 URL 括起来元素,因为这就是应该编写 HTML 的方式。

您也可以尝试通过 parseUri() 确认, PackageManager , 和 queryIntentActivities() ,如果您生成的 URL 解析为某些东西——如果没有解析,则 URL 有问题。

Here is a sample project显示 URI_INTENT_SCHEME 的使用,以防它给您任何想法。

关于android - 使用 Intent URI 启动我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3564393/

相关文章:

android - 在android中显示pdf

cocoa - 拦截 Mail.app 中的发送点击

http - 带有 a/in 的查询字符串有效吗?

java - 将 URI 放入 FileInputStream

sqlite - 具有分区存储的 Android 11 SQLite

java - 如何计算 Firebase 存储中的文件(图像)数量

Android SQLite 在 170 行后崩溃

Android应用超时如何申请?当它最小化时

html - 对于电子邮件通讯,我应该使用双 br 标签来减少一些内联代码吗?

email - Java MimeMessage 到带有所有附件的 eml 文件