You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:29:29