【发布时间】:2014-05-07 12:57:56
【问题描述】:
在 Android 4.4 中,来自 Play 商店的应用程序只能写入它的应用程序特定目录(例如:/storage/extSdCar/Android/data/com.example.myapp/),并且不允许应用程序在此目录之外写入微型 SD 卡。因此,我正在探索新的 SAF API 以检查是否可以使用 SAF 写入 micro SD 卡而不是应用特定目录。
我通过创建示例提供程序和客户端应用程序实现了 SAF。在我的提供者中,我尝试通过在 queryRoots 中实现以下代码来显示 SD 卡的全部内容:
row.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(new File("/storage/extSdCard")));
row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_RECENTS | Root.FLAG_SUPPORTS_SEARCH);
我在我的客户端中创建了以下意图,我可以通过我的提供程序从 SAF 的系统 UI 浏览 SD 卡的全部内容。
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TITLE, "test.txt");
startActivityForResult(intent, WRITE_REQUEST_CODE);
当我单击保存按钮时,我收到 Toast 错误“无法保存文档”。但是当我导航到应用程序特定目录(/storage/extSdCar/Android/data/com.example.myprovider/)时我在系统 UI 中的提供者,我能够保存文档。 也没有诸如 Intent.CATEGORY_WRITABLE 之类的意图,因此我只能获取可以编辑的文档。 请在以下几点上帮助我:
1.似乎即使我们使用 SAF,micro SD 卡的 WRITE 限制仍然保持不变。这是正确的吗?
2.有什么方法可以创建、删除或修改 micro SD 卡中我的应用特定目录之外的现有文件?
3.谁决定普通用户文件(如照片、视频、音乐、文档等)的 FLAG_SUPPORTS_WRITE 标志?
【问题讨论】:
标签: java android android-sdcard android-4.4-kitkat storage-access-framework