聚热点 juredian

小米11data访问限制如何解决(Android 11的外部存储权限申请流程)

Android 11对应的API为30,从这个版本起要想对外部存储进行写入操作的话需要比以往的操作多几个步骤,这里简单归纳下,具体的原因我就不多话了,具体步骤如下以供参考

1-在AndroidManifest.xml里这样注册权限:

比以往多一条MANAGE_EXTERNAL_STORAGE

2-在AndroidManifest.xml的application下加入android:requestLegacyExternalStorage="true"

其实这句在API30下已经不起作用了,但在API29中还有作用,所以一并加上以免麻烦。

3-在代码中申请权限,由于这些新加的权限特殊,以往的申请方式不起作用,无论怎么申请,最后必然是授权失败。所以正确的方式就是先判断API的版本,如果大于等于30则用Environment.isExternalStorageManager()判断是否有授权,这个方法会返回一个布尔值,如是false就跳到一个特殊的页面让用户手动授权,跳转方法如下:

valintent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)intent.data= Uri.parse("package:"+ requireActivity().packageName)startActivity(intent)//startActivityForResult(intent,0x01)

由于这个授权界面是一个Activity,所以用startActivity还是startActivityForResult都可以,具体看你怎么利用生命周期了。

手动授权界面

4-记得用传统方式申请下WRITE_EXTERNAL_STORAGE,以免产生不必要的麻烦。

到此,针对Android 11的外部存储的权限申请就这样了。最后说一下,虽然通过上述方式可以对整个外部存储空间进行文件的读写操作,但Android/data目录是个例外,此目录下保存着所有应用的专属空间,在Android11下已经不让访问了,但可以通过代码方式直接访问自己的那个目录。

搜索建议:
热议

 4个月宝宝发育指标 4个月宝宝发...

孩子出生后,作为家长最关心的就是孩子的生长发育问题了。尤其是出生的头三年,是孩子生长发育关键期,各方面会逐渐发育完全,逐渐解锁各项能力,孩子长得也比较快。因此家...(展开)