在Android 4.4中,来自Play商店的应用程序只能写入其应用程序特定目录(例如:/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);
Run Code Online (Sandbox Code Playgroud)
我在我的客户端创建了以下意图,我可以通过我的提供商从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);
Run Code Online (Sandbox Code Playgroud)
当我单击保存按钮时,我收到Toast错误"无法保存文档".但是当我导航到我的提供者的App特定目录(/storage/extSdCar/Android/data/com.example.myprovider/)时系统UI,我能够保存文档.也没有意图,如Intent.CATEGORY_WRITABLE,所以我只能获得可以编辑的文档.请帮我解决以下几点:
似乎即使我们使用SAF,仍然对micro SD卡的WRITE限制保持不变.它是否正确?
2.有什么方法可以创建或删除或修改micro SD卡中我的App特定目录之外的已有文件?
3.谁为普通用户文件决定FLAG_SUPPORTS_WRITE标志,如照片,视频,音乐,文档等?
java android android-sdcard android-4.4-kitkat storage-access-framework