在Android 4.4中,来自Play Store的应用只能写入其特定目录(例如:/storage/extSdCard/Android/data/com.example.myapp/),而且应用不能在micro SD卡上写入除此目录之外的其他文件。因此,我正在探索新的SAF API,以查看是否可以使用SAF在除应用程序特定目录之外的micro SD卡上进行写入。
我通过创建示例提供者和客户端应用程序来实现SAF。在我的提供者中,我尝试通过在queryRoots中实现以下代码来显示SD卡的整个内容:
1.即使我们使用SAF,微型SD卡上的写入限制仍然保持不变。这是正确的吗? 2.是否有任何方法可以在微型SD卡的App特定目录之外创建、删除或修改已有文件? 3.谁决定普通用户文件(例如照片、视频、音乐、文档等)的FLAG_SUPPORTS_WRITE标志?
我通过创建示例提供者和客户端应用程序来实现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错误“无法保存文档”。但是当我在系统UI中导航到我的提供程序的应用程序特定目录(/storage/extSdCard/Android/data/com.example.myprovider/)时,我可以保存该文档。同时,没有像Intent.CATEGORY_WRITABLE这样的意图,以便我只能获取可以编辑的文档。请帮我解决以下问题:1.即使我们使用SAF,微型SD卡上的写入限制仍然保持不变。这是正确的吗? 2.是否有任何方法可以在微型SD卡的App特定目录之外创建、删除或修改已有文件? 3.谁决定普通用户文件(例如照片、视频、音乐、文档等)的FLAG_SUPPORTS_WRITE标志?