求支持沙盒化存储的安卓文件管理&媒体播放器

背景

相较于iOS的沙盒化文件管理模式,Android的文件管理一向以“方便/混乱”令人又爱又恨。考虑到.nomedia屏蔽媒体文件仅仅是程序与系统间的君子协定,而部分程序有意无意忽视上述屏蔽,造成媒体选取界面被大量无用视频/图片(如在微信图片选取界面中出现的电视剧/教程等)占据,给用户带来了困扰。
如何最大程度减少手机中存储的大量媒体文件对其他程序的干扰,是十分有研究价值的问题。

Android10、11新增的分区存储特性,是解决程序随地大小便问题的勇敢尝试,自此 /Android/data/appname 文件夹成为了程序的专属领地。如果有一款文件管理器&媒体播放器能将媒体资源存储于自己的专属领地中,即可避免这些资源对其他应用的干扰。

需求功能

  • 文件存储于/Android/data/appname 中
  • 内置图片、音频、视频播放器,具有基础的媒体浏览能力
  • 支持用外部浏览器打开及分享文件功能
  • 支持在专属领地与公共存储空间之间批量移动文件
  • 支持FTP服务器/SMB客户端/FTP客户端/SFTP客户端等功能,与第三方快速传输文件
  • 注:需求有一点像在线视频客户端的离线缓存功能——无论客户端里缓存多少内容,都不会影响其他应用的媒体浏览体验。

谢谢各位大佬!

以目前的 Android 文件权限政策,应该是只有 Android 自带的 “文件” (com.google.android.documentsui)应用能做到。

但是,很多国产 ROM 把这个 App 给隐藏了。有如下几种唤出这个 App 的方法

方法1:安装 Activity Manager,

并在其中搜索 com.google.android.documentsui,找到 “文件” 应用,点击进去,找到其中的 FileActivity 活动,并为其创建快捷方式。

方法2:更换启动器为 Lawnchair该启动器的应用列表中包含了 “文件” 应用。

方法3:可能是最接近您需求的 使用 “Anemo” 应用。这个应用很值得一提,它可以创建一个隔离空间(但好像只能创建一个隔离空间),然后您可以将自己的文件存储在这个空间中,不需要使用的时候可以卸载这个存储空间,这样任何应用都无法找到这个空间。

这个应用启动后也可以唤起 Android 系统自带的文件应用。


如果您还需要文本编辑器,可以试试这个应用:

com.google.android.documentsui 是 Android 系统级的文件管理应用,对存储空间具有完全控制权,您可以根据自己的需求把文件复制到任何地方。

您还可以使用这个应用,通过系统的 “分享” 菜单保存文件到指定位置:

您可以试试这个应用,或许有用:

这个,恕我才疏学浅,就不太清楚了。

2 个赞

二楼说的可能太乱了,我再开一楼简单概括一下:

  • 创建隔离空间: Anemo
  • 影音播放器:Reex 或 MPV
  • 文件复制和移动:系统自带的文件管理器本身就支持,也可以用 Save 应用,通过系统分享菜单发送文件
  • 连接 SMB、FTP 等:CIFS Documents Provider

简而言之,楼主的需求可能没有单个 App 能做到,但可以通过 Anemo 实现与楼主需求类似的存储方式,再通过其他软件辅助,满足楼主的其他需求。

1 个赞

直接用多用户功能 创建一个单独的空间?
这个空间内 任意app能读取的文件相对原账户都是隔离的

1 个赞

感谢大佬,学了很多,先去看下Anemo。

以目前的 Android 文件权限政策,应该是只有 Android 自带的 ‘文件’ (com.google.android.documentsui )应用能做到。

其实我可能没有表述清楚。这里说的支持沙盒化存储,是希望找到一个文件管理器/媒体播放器,把媒体文件存储在自己的data文件夹里(而不是存储在 /storage/emulated/0),这是程序存储私有数据的规范方法;您说的自带“文件”的功能更像是将文件自由转移到其他程序的data文件夹里。

  • 图片可以用系统的图库打开,但好像无法翻页。

和前一条情况相似,如果A程序data文件夹里的文件共享给B程序打开,标准行为就是将文件单独传给B,这也是无法翻页的原因。如果A打开自己data文件夹里的数据则不会有这些限制。

root后的“存储空间隔离”可以实现上面的需求——它能重定向每个app的存储空间位置,使程序觉得自己在访问/storage/emulated/0,数据却实际存储于各自的data文件夹中,可惜root并不是容易达成的事情,以及被重定向并非app自身的预期行为,在文件分享、跳转第三方打开时有意外发生。

需求有一点像在线视频客户端的离线缓存功能

B站、腾讯视频等在线视频软件的实现方式便与上述的需求匹配——

  • 视频缓存到本地后存储于自己的data文件夹,不影响其他应用的媒体选择界面,其他程序仍然干干净净
  • 自己缓存的视频,自己可以播放
  • 不支持外部打开及文件分享、文件移动、文件传输客户端,这是功能设计决定的

再次感谢大佬提供的方向!

您说得很对,不过各家厂商对多用户功能的实现可能存在差异。
如我此前使用的MIUI14应用双开功能便创建了多用户,但用户之间的媒体文件是共享的,可以在主用户的微信媒体选取界面中看到分身用户/storage/emulated/*/中的文件;此前也使用过炼妖壶island,同样存在类似问题,且island会影响MIUI自带文件浏览器的功能,造成无法使用小米的文件互传服务。

其实 Fcitx 5 和 Termux 可以在系统原生的文件 App 中创建一个快捷方式,直接指向自己在 /Android/data/ 下的存储目录,我们可以把文件 “寄存” 在他们的 Data 目录下。所以,还有一种解决方案是:

  1. 想办法唤出系统的 DocumentsUI。
  2. 把文件复制到这些 App 创建的快捷方式中。

至于 Anemo,它的文件不是存放在 Data 文件夹中的。

另外,DocumentsUI 好像也无法向 Data 目录写入文件。

1 个赞

又想到一个解决方案:

  1. 安装质感文件
  2. 安装 Fcitx 5
  3. 进入 质感文件侧边栏→添加存储空间→外部存储空间→选择目录 "小企鹅输入法5"添加后侧边栏中会多出一个名字为 “files” 的项目,他对应的就是刚刚添加的 Fcitx 5 的存储空间。
  4. 把图片文件的打开方式设置为 “质感文件”
  5. 把要隔离存放的文件,放到 “files” 中

质感文件应该不必过多介绍,其自带文本编辑器、图片查看器、压缩文件查看工具,而且支持挂载 FTP、SFTP、SMB、WebDAV。

2 个赞

不是应用多开 是手机分身 安全空间 私密空间 这类功能
就是全部数据空间 包括存储空间都是加密 独一份的那种 彻底隔离

用这个APP可以解决毒瘤乱拉屎的问题,就是这个APP的数据会强制放到android/data中,但有时还是会有侧漏。(注意:付费,需要ROOT)

直接用 termux 不香吗,通过支持 webdav 或 ftp 等服务的文件管理器(比如 mixplorer)管理私有文件

https://wiki.termux.com/wiki/Remote_Access

1 个赞

存储空间隔离+1

相比辛苦去找符合要求的应用,不如直接改造出一个。

感谢,最终选择了Fcitx5作为独立存储空间的方案,十分满意!

简单测试了一下
发现几个小问题
1.挂载存储空间的APP必须处在后台运行,否则质感文件就会报错无法访问
2.从公共目录复制到挂载空间内的文件,必须手动刷新才能看到
3.应用的私有文件,每次重启都会出现

在我这边的情况是:

  1. 我手机上的默认输入法是 Fcitx 5,它会一直在后台运行,因此质感文件随时可以访问其存储。但是 Android 系统似乎会阻止非系统应用关联启动,因此若 Fcitx 未在后台运行,质感文件无法访问其存储空间。而系统的 DocumentsUI 对存储空间有较高的控制权,即使 Fcitx 不在后台运行也可以访问。
  2. 这个的确是质感文件的问题。您可以用 DocumentsUI 来访问其存储空间。
  3. 这个我不太明白是什么意思,我这边复制到 Fcitx 存储文件夹中的文件,其他应用是看不到的。

DocumentsUI 的唤出方法您可以看本帖二楼:https://meta.appinn.net/t/topic/54771/2

就是你这个输入法,每次启动都会在自己的data目录下,创建自己的两个文件夹保存数据。
然后用solid访问这个私有目录,就能看见这两个不是我自主决定出现的文件夹。

洁癖犯了(划掉)
果然还是得 存储空间隔离(划掉)

这个存储空间就是 Fcitx 5 存放配置文件的目录,凭什么不让人家在里面生成配置文件 :doge:

如果想要一个只属于用户的独立存储空间, Anemo 可能更适合。

当然,如果能 Root,“存储空间隔离”肯定是比较理想的答案。本帖讨论的,也无非是无法 Root 的情况下的缓兵之计。