让 Android 分享能直接进来:接收文件 + 一次代码瘦身

January 12, 2026
1 min read
By devshan

Table of Contents

This is a list of all the sections in this post. Click on any of them to jump to that section.

想要在 Android 上,别的 App 分享文件时直接把 StoreX 当目标。趁机把老旧的废代码也清理掉。

分享接收怎么做的

  • Manifest:给 MainActivity 加上 ACTION_SEND / ACTION_SEND_MULTIPLE 的 intent-filter。
  • 原生侧 (MainActivity.kt)
    • 收到分享 Intent,把 content:// URI 复制到 cacheDir/shared_files/,规避权限问题。
    • 通过 MethodChannel 把本地路径发给 Flutter。
  • Flutter 侧
    • ShareService 监听分享事件,既处理冷启动(getPendingFiles)也处理热启动(onShareReceived)。
    • home_page.dart 收到后弹出文件夹选择器,选完直接进上传队列。

关键点:先复制到私有缓存再传递路径,避免 content URI 权限掉链子。

顺手做的代码瘦身

  • 删掉不用的 setOffline()loadCachedFiles()app_state.dart),离线加载合并到现有流程。
  • home_page.dart 里两个一模一样的上传方法合成一个 _pickAndUploadFiles()
  • 清掉死代码:save_note 分支、_handleSaveNote()setShareCallback() 等没人调用的函数。

变更文件

  • AndroidManifest.xmlMainActivity.kt:注册分享,处理并下发文件路径。
  • share_service.dart:新增分享接收服务。
  • home_page.dart:初始化分享服务、处理回调、合并重复上传逻辑。
  • app_state.dart:移除废弃方法。

验证

flutter analyze 通过;实际测试分享单文件、多文件都能弹出目录选择并进入上传队列。***