文件与分享
文件与分享 · 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();
}
}数据链路
| 组件 | 职责 |
|---|---|
ShareTargetCompat | manifest 中的 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。