Siv*_*amy 10 java android android-sdcard android-4.4-kitkat storage-access-framework
在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标志,如照片,视频,音乐,文档等?
实施 时DocumentsProvider,您只能将访问权限扩展到磁盘上您已有权访问的文件。添加 aDocumentsProvider不会为您提供任何新的访问权限,因此您可能不需要实现一个。
ACTION_OPEN_DOCUMENT您可以使用您提到的或意图来获得 SD 卡上任何位置的写入访问权限ACTION_CREATE_DOCUMENT。系统内置一个ExternalStorageProvider可以访问所有 SD 卡的权限,一旦用户通过这些意图确认,它会很乐意将写入权限委托给您。
用户可能需要启用“设置 > 显示高级设备”才能显示 提供的 SD 卡ExternalStorageProvider。另外,如果您想限制用户与本地存储交互,您可以设置EXTRA_LOCAL_ONLY.
对于 (2),您可以使用 来在特定于包的目录之外创建新文件ACTION_CREATE_DOCUMENT,并且可以出于任一目的选择现有文件。用户选择的文件可以使用 删除DocumentsContract.deleteDocument()。
对于 (3),目前内置于平台中的照片、视频和音乐MediaDocumentsProvider尚未扩展。FLAG_SUPPORTS_WRITE
希望这可以帮助。:)
| 归档时间: |
|
| 查看次数: |
7116 次 |
| 最近记录: |