ShareTarget:应用出现在分享列表 · AndroidX 源码指南
AAndroidX 源码指南
文件与分享
文件与分享 · androidx.documentfile

ShareTarget:应用出现在分享列表DocumentFile 1.1.0-rc01

从 manifest 的 share target 定义到 ChooserTargetServiceCompat 的展示链路。

最后更新 2026-08-01

复制即用:manifest 声明

<activity android:name=".ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

基础分享入口:其他应用 ACTION_SEND 时你的 Activity 出现在分享面板。

直达分享目标(share target)

<activity android:name=".ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>

    <meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ShareTargetService" />
</activity>
<!-- res/xml/share_targets.xml -->
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <share-target android:targetClass=".ShareActivity">
        <data android:mimeType="text/plain" />
        <category android:name="android.intent.category.DEFAULT" />
    </share-target>
</shortcuts>
// ShareTargetService:提供直达目标
public class ShareTargetService extends ChooserTargetServiceCompat {
    @Override
    public List<ChooserTarget> onGetChooserTargets(
        ComponentName targetActivity, IntentFilter matchedFilter) {
        return buildTargets();
    }
}

数据链路

组件职责
ShareTargetCompatmanifest 中的 share target 定义(scheme/host/path/mimeType/targetClass)
ShareTargetXmlParser解析 share target 定义
ShortcutInfoCompatSaverImpl持久化为 shortcut(getInstance 全局实例)
ChooserTargetServiceCompat系统调用获取直达目标

价值:分享入口不是冷启动主 Activity,而是把最可能分享的目标(如”分享到某对话”)放在分享面板前列。

常见陷阱

  • MIME 类型不匹配SEND 的 mimeType 与 share target 不一致不显示。
  • targetClass 写错:要指向处理分享的 Activity。
  • 权限ChooserTargetService 需要 android.permission.BIND_CHOOSER_TARGET_SERVICE
  • 设备不支持:旧系统不展示直达目标。

明确不解决什么

  • 不处理分享内容本身:文本、URI、数据的传递仍由 Intent/ClipData 完成。
  • 不生成图标与标签:展示外观来自 shortcut 定义。
  • 不是所有设备都展示直达目标:系统 chooser 版本和是否支持 ChooserTargetService 决定最终效果。

要点

  • manifest intent-filter 声明基础分享入口;share target 定义直达目标。
  • ChooserTargetServiceCompat.onGetChooserTargets 提供直达列表。
  • 数据链路:定义 → 解析 → shortcut 持久化 → 展示。
  • 分享内容传递仍走 Intent/ClipData。

相关页面