未知schema时如何从Android浏览器启动第三方应用?
现有实现的遗漏点
你写的Intent URI不符合Android官方规范,核心问题是缺少host位置的占位符:官方要求Intent URI的最小结构是intent:///#Intent;xxx;end,你原来的写法只有intent://#Intent;xxx;end,少了host位的斜杠,导致浏览器无法正确解析协议。
此外只传包名无法匹配大多数应用的Intent过滤器,需要补充启动页对应的action和category参数,修正后的可运行代码如下:
window.open( "intent:///#Intent;package=com.google.android.youtube;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;end" );
<a href="intent:///#Intent;package=com.google.android.youtube;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;end"> 测试链接 </a>
额外注意:Android 11及以上版本要求发起唤起的应用提前在AndroidManifest.xml中配置<queries>标签声明要唤起的目标包名,部分国产浏览器默认会拦截Intent协议唤起,需要单独做兼容适配。
查询已注册Schemes的方法
你补充的adb命令已经是最直接的本地查询方案,还有两种常用实现方式:
- 如果你能拿到目标应用的APK安装包,直接反编译后查看
AndroidManifest.xml里所有带<data android:scheme="">属性的intent-filter节点,即可提取到该应用所有注册的Scheme - 如果你需要批量导出当前手机所有已安装应用的Scheme清单,可以运行如下命令直接导出到本地文件:
adb shell dumpsys package r | grep -i scheme > all_app_schemes.txt
内容的提问来源于stack exchange,提问作者dtrott87
相关产品推荐
相关产品推荐

