Android通过链接启动其他应用指定Activity的问题排查
看起来你在通过链接跨应用唤起Activity的时候踩了个小坑,我来帮你梳理下问题和修复方案:
问题根源分析
你遇到的「选择器不弹出+无关联应用」报错,核心原因是分享方法里的Intent配置错误:ACTION_SEND是用于分享文本/内容的Action,你不需要给它设置data字段——设置后系统找不到能匹配「ACTION_SEND + 自定义Scheme」的应用,自然就会报错。正确的做法是把要分享的URI作为文本内容传递,而不是绑定到Intent的data上。
修复方案及代码调整
1. 修正分享URI的方法
修改你的sendUri方法,移除intent.data的设置,把URI通过EXTRA_TEXT传递:
fun sendUri(photoId: String?, size: Long) { // 注意参数要和URI里的变量对应,你原来的参数名和URI变量不匹配,记得修正 val sharedUri = "mine://photo?photo_id=$photoId&size=$size" val intent = Intent(Intent.ACTION_SEND) intent.type = "text/plain" // 把自定义URI作为分享的文本内容传递 intent.putExtra(Intent.EXTRA_TEXT, sharedUri) startActivity(Intent.createChooser(intent, "Share URL")) }
2. 确认应用A的Manifest配置(你的现有配置是正确的)
你给PhotoActivity配置的intent-filter没问题,它已经声明了处理mine://photo这个Scheme的VIEW请求,且包含了BROWSABLE类别——这是外部应用能唤起它的关键,不需要修改:
<activity android:name=".activity.PhotoActivity"> <intent-filter > <data android:scheme="mine" android:host="photo"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
3. 测试流程
- 调用修正后的
sendUri方法,选择应用B(或其他支持文本分享的应用)发送链接 - 在应用B中收到链接后,点击该文本链接(如果是自定义应用B,需要确保它能识别并触发链接打开动作)
- 此时系统会匹配到应用A的
PhotoActivity,弹出选择器让用户选择打开方式,或直接唤起目标页面
额外:如果应用B是自研的,可直接处理链接唤起
如果应用B是你自己开发的,也可以在点击事件里直接触发唤起逻辑,跳过系统选择器:
// 应用B中处理链接的点击事件 val targetUri = Uri.parse("mine://photo?photo_id=xxx&size=xxx") val intent = Intent(Intent.ACTION_VIEW, targetUri) startActivity(intent)
内容的提问来源于stack exchange,提问作者mel
相关产品推荐
相关产品推荐

