如何让Flutter开发的安卓应用成为系统图片分享的可选应用?
实现思路
整体实现分为三个核心环节,安卓端注册分享入口、接收分享数据、跨层传递到Flutter层后执行上传逻辑即可:
1. 配置应用出现在系统分享列表
修改Flutter安卓项目下的android/app/src/main/AndroidManifest.xml文件,在主Activity标签内新增接收分享的Intent过滤器:
<activity android:name=".MainActivity" <!-- 原有配置保持不变 --> > <!-- 新增如下Intent过滤器 --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 仅接收图片类型的分享 --> <data android:mimeType="image/*" /> </intent-filter> </activity>
配置完成后重新编译应用,系统分享图片时就会自动把你的应用列入可选列表。
2. 接收外部分享的图片数据
有两种实现方案可选:
- 手动实现原生层交互:在主Activity中重写
onCreate、onNewIntent方法,捕获动作类型为ACTION_SEND的Intent,读取Intent携带的图片Uri,转换为本地文件路径后,通过MethodChannel传递给Flutter层。 - 直接使用第三方封装包:可直接引入
receive_sharing_intent包,无需手动编写原生层代码,直接在Flutter层调用对应的监听方法即可拿到分享的图片文件路径。
注意:安卓13及以上版本需要动态申请READ_MEDIA_IMAGES权限,才能正常读取分享得到的图片文件内容。
3. 后台发送图片到PC端
拿到图片本地路径后,根据你的使用场景选择传输方案即可:
- 同局域网场景:PC端启动端口监听服务,安卓端通过Socket直接将图片文件流发送到PC对应端口
- 跨网场景:安卓端先将图片上传到自己的服务端,再由服务端推送给登录同账号的PC端
- 需要保证后台传输稳定性的话,可以给安卓端配置前台服务,避免系统后台查杀导致传输中断
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

