想要在 Android 上,别的 App 分享文件时直接把 StoreX 当目标。趁机把老旧的废代码也清理掉。
分享接收怎么做的
- Manifest:给 MainActivity 加上
ACTION_SEND/ACTION_SEND_MULTIPLE的 intent-filter。 - 原生侧 (MainActivity.kt):
- 收到分享 Intent,把 content:// URI 复制到
cacheDir/shared_files/,规避权限问题。 - 通过 MethodChannel 把本地路径发给 Flutter。
- 收到分享 Intent,把 content:// URI 复制到
- Flutter 侧:
ShareService监听分享事件,既处理冷启动(getPendingFiles)也处理热启动(onShareReceived)。home_page.dart收到后弹出文件夹选择器,选完直接进上传队列。
关键点:先复制到私有缓存再传递路径,避免 content URI 权限掉链子。
顺手做的代码瘦身
- 删掉不用的
setOffline()、loadCachedFiles()(app_state.dart),离线加载合并到现有流程。 home_page.dart里两个一模一样的上传方法合成一个_pickAndUploadFiles()。- 清掉死代码:
save_note分支、_handleSaveNote()、setShareCallback()等没人调用的函数。
变更文件
AndroidManifest.xml、MainActivity.kt:注册分享,处理并下发文件路径。share_service.dart:新增分享接收服务。home_page.dart:初始化分享服务、处理回调、合并重复上传逻辑。app_state.dart:移除废弃方法。
验证
flutter analyze 通过;实际测试分享单文件、多文件都能弹出目录选择并进入上传队列。***