Andid 11对应的API为30,从这个版本起要想对外部存储进行写入操作的话需要比以往的操作多几个步骤,这里简单归纳下,具体的原因我就不多话了,具体步骤如下以供参考
1-在里这样注册权限:
<uses-permission andid:name="" /> <uses-permission andid:name="" /> <uses-permission andid:name="" />
比以往多一条MANAGE_EXTERNAL_STORAGE
2-在的lication下加入andid:requestLegacyExternalStorage=”true”
其实这句在API30下已经不起作用了,但在API29中还有作用,所以一并加上以免麻烦。
3-在代码中申请权限,由于这些新加的权限特殊,以往的申请方式不起作用,无论怎么申请,必然是授权失败。所以正确的方式就是先判断API的版本,如果大于等于30则用判断是否有授权,这个方返回一个布尔值,如是false就跳到一个特殊的页面让用户手动授权,跳转方法如下:
val intent = Intent ("package:" + requireActivity.packageName) startActivity(intent) //startActivityForResult(intent,0x01)
由于这个授权界面是一个Activity,所以用startActivity还是startActivityForResult都可以,具体看你怎么利用生命周期了。
手动授权界面
4-记得用传统方式申请下WRITE_EXTERNAL_STORAGE,以免产生不必要的麻烦。
到此,针对Andid 11的外部存储的权限申请就这样了。说一下,虽然通过上述方式可以对整个外部存储空间进行文件的读写操作,但Andid/data目录是个例外,此目录下保存着所有应用的专属空间,在Andid11下已经不让访问了,但可以通过代码方式直接访问自己的那个目录。
互联网用户投稿文章,作者:投稿,如若转载,请注明出处:https://www.missionshow.com/1337.html