如何配置Android应用支持接收图库多图及各类外部文件共享
现有配置无法满足多图共享需求,存在以下问题
- 仅配置了
ACTION_SENDAction,该Action仅用于接收单条共享内容,Android系统多选图片共享时触发的是ACTION_SEND_MULTIPLEAction,未配置该Action的情况下你的应用不会出现在多图共享的候选列表中 - 启动页配置和共享接收配置混在同一个intent-filter中,容易出现匹配逻辑混乱,建议拆分
- 重复声明了两次
ACTION_SEND,属于冗余配置 - mimeType配置为
*/*会让你的应用出现在所有类型内容的共享列表中,若仅需接收图片,限制为image/*更合理
调整后的配置示例
<activity android:icon="@mipmap/ic_launcher" android:name=".MainActivity"> <!-- 启动页专属intent-filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 共享接收专属intent-filter --> <intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 仅接收图片,如有其他文件接收需求可自行调整mimeType --> <data android:mimeType="image/*" /> </intent-filter> </activity>
后续代码处理注意事项
配置完成后需要在MainActivity中处理传入的Intent,拿到图片Uri后即可传递给RecyclerView等组件使用:
- 单图共享场景:
Action为ACTION_SEND,调用intent.getParcelableExtra(Intent.EXTRA_STREAM)获取单张图片Uri - 多图共享场景:
Action为ACTION_SEND_MULTIPLE,调用intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)获取图片Uri列表 - 拿到Uri后需要申请持久化权限,避免后续权限失效无法访问图片,示例代码如下:
// Kotlin示例 if (intent.action == Intent.ACTION_SEND_MULTIPLE) { val imageUris = intent.getParcelableArrayListExtra<Uri>(Intent.EXTRA_STREAM) imageUris?.forEach { uri -> contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) } // 此处将imageUris传递给你的列表适配器即可 }
// Java示例 if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { for (Uri uri : imageUris) { getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); } // 此处将imageUris传递给你的列表适配器即可 } }
内容的提问来源于stack exchange,提问作者abdelrhman elgendy
相关产品推荐
相关产品推荐

