是否只有通过默认“下载”应用程序共享的文件的临时权限?

时间:2017-02-15 10:28:22

标签: android android-permissions android-fileprovider

用户在某个文件浏览器中选择/共享音频文件后,我尝试播放音频文件。为此,我使用过滤器意图,通过它我得到Uri的音频文件。基于Uri,我可以玩它。 MediaPlayer使用Uri打开FileDescriptor。

我存储了Uri,因此我可以在重新启动应用后使用它。它适用于所有文件浏览器,除了android的默认下载应用程序。如果我从下载应用程序打开文件,我会收到这样的Uri:

content://com.android.providers.downloads.documents/document/25 - on android 7

我可以玩。但是在应用程序重新启动后,我再也无法使用相同的uri了。我得到例外:

    java.lang.SecurityException: Permission Denial: 
opening provider com.android.providers.downloads.DownloadStorageProvider from 
ProcessRecord{160760b 3618:com.sample/u0a71} (pid=3618, uid=10071) 
requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS

来自docs关于此权限:

  

此权限仅应由平台文档请求   管理应用。此权限无法授予第三方应用。

这是否意味着应用只拥有文件的临时权限?这有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

所以我发现发件人应用只使用这些标志FLAG_GRANT_WRITE_URI_PERMISSIONFLAG_GRANT_READ_URI_PERMISSION设置了临时权限。只有处理意图的活动处于活动状态,权限才有效。 所以至少要检测一下我用

if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == Intent.FLAG_GRANT_READ_URI_PERMISSION || (flags & Intent.FLAG_GRANT_WRTITE_URI_PERMISSION) == Intent.FLAG_GRANT_WRITE_URI_PERMISSION) {
//only temporary permission
}