android - Android 如何打开一个基于 Intent 的 Chrome URI
问题描述
从Chrome 文档中,我了解到可以使用以下 URI 打开应用程序
intent:
HOST/URI-path // Optional host
#Intent;
package=\[string\];
action=\[string\];
category=\[string\];
component=\[string\];
scheme=\[string\];
end;
我想知道是否可以从我的应用程序中打开此 URI。
示例 URI
intent:
//qr/json/%7B%22u%22%3A%22https%3A%2F%2Fprivacybydesign.foundation%2Fbackend%2Firma%2Fsession%2FvsRjkZF2B2H17sBWmVZe%22%2C%22irmaqr%22%3A%22disclosing%22%7D
#Intent;
package=org.irmacard.cardemu;
scheme=cardemu;
l.timestamp=1620907855707;
S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dorg.irmacard.cardemu
;end
因为它看起来像一个普通的 URI,我想我可以这样打开它:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("%EXAMPLE_URI%"));
startActivity(intent);
这给了我一个ActivityNotFoundException
. 我错过了什么?
原因:android.content.ActivityNotFoundException:没有找到处理 Intent { act=android.intent.action.VIEW dat=intent://qr/json/{"u":"https://privacybydesign.foundation/backend 的活动/irma/session/vsRjkZF2B2H17sBWmVZe","irmaqr":"disclosure"} pkg=org.irmacard.cardemu(有附加功能)}
解决方案
Chrome 文档中描述的“intent:”语法用于从网页启动应用程序,Chrome 将处理href
并检索参数以通过 Android Intent 启动应用程序。
您提供的示例 URI 的方案是intent://
,默认情况下不处理。
如果要处理intent://
URI,则需要创建深层链接
如果您想从您的 Android 应用程序打开网页,您可以使用 ACTION_VIEW 操作并在意图数据中指定网页 URL。
public void openWebPage(String url) {
Uri webpage = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
// example
// openWebPage("https://privacybydesign.foundation/backend/irma/session/vsRjkZF2B2H17sBWmVZe")
有关意图和意图过滤器 的更多信息
推荐阅读
- php - 能够使用 api 集成登录,但 createEnvelop 方法返回 - 连接到 API 时出错
- plsql - 在 Windows 10 上看不到下划线
- java - MongoDB 不会为嵌套文档的 _id 字段保存空值
- android - 第二次运行时Android WebView很慢
- java - Java中如何将多个值添加到数组列表中
- elasticsearch - 如何为 ELK Stack 中的节点分配 CPU、RAM、磁盘、分片?
- java - 如何使用 Spring Data JPA 处理重复的字段值?
- python - 在 np.select 中使用条件字符串时出现问题
- php - 如何通过多次重定向保留表单提交的数据?
- php - 如何将输入中的值传递给 sum 方法