Scoped Storage/独立存储

Contents

Scoped Storage/独立存储... 1

Sandbox view.. 1

Android对文件管理器类应用的建议... 1

SAF. 1

总结... 3

 

Scoped Storage/独立存储

Android Q上应用访问外部存储时,只能访问到自己的应用的folder,比如:SDCard/Android/data/你的应用的包名/files/,即sandbox view。

 

Sandbox view

  1. target api Android 9及以下的应用不受sandbox影响

 

     2. AndroidQ的应用可以通过allowLegacyExternalStorage关掉这个限制。

    
      android:allowLegacyExternalStorage="false" ... >
        ...
      
    
   

  • 但是来年的Android大版本更新时,sandbox会强制对所有应用生效。

Android对文件管理器类应用的建议

对于类似文件管理器这样的应用,Android建议使用ACTION_OPEN_DOCUMENT_TREE,引导用户在根目录给应用授权,只要一次授权,应用就对该目录及其子目录拥有权限。

SAF

Android的存储访问框架叫SAF(Storage Access Framework),见下图:

Scoped Storage/独立存储_第1张图片

SAF分为三部分,

  1. Document provider,

可以对应手机外部存储的Download目录,也可以是某个云帐号。总之,大家都可以定义自己的Document provider,只需要指定自己的根,就有根内数据的访问权限。所有Document provider都要声明MANAGE_DOCMENTS权限,该权限只有系统可以获得。所以即使是三方自己实现的Document provider,应用都不能直接访问。必须通过picker

  1. Picker

即opengrok里的DocumentUI,是一个系统应用,也是client app和Document provider之间的桥梁。如下图:

Scoped Storage/独立存储_第2张图片

  1. Client app

通过intent ACTION_OPEN_DOCUMENT 和ACTION_CREATE_DOCUMENT调起Picker,picker列出合适的document providers,用户选择,系统授权并返回所选的document provider的数据。

 

总结

理论上来讲,厂商可以绕过系统的picker,做个假的picker,直接获取document provider的数据的,但增加了系统的风险性。

 

Ref

https://developer.android.google.cn/preview/privacy/scoped-storage?hl=en

https://developer.android.google.cn/guide/topics/providers/document-provider

https://developer.android.google.cn/reference/android/provider/DocumentsProvider.html

你可能感兴趣的:(Scoped Storage/独立存储)