在 Android 4.4 中,来自 Play Store 的应用程序只能写入它的应用程序特定目录(例如:/storage/extSdCar/Android/data/com.example.myapp/),并且不允许在 micro 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/)时系统用户界面,我可以保存文档。也没有诸如 Intent.CATEGORY_WRITABLE 之类的意图,因此我只能获取可以编辑的文档。请在以下几点上帮助我:
1.似乎即使我们使用SAF,对micro SD卡的WRITE限制仍然保持不变。这个对吗?
2.有什么方法可以创建、删除或修改 micro SD 卡中我的应用程序特定目录之外的现有文件?
3.谁决定普通用户文件(如照片、视频、音乐、文档等)的 FLAG_SUPPORTS_WRITE 标志?