外部存储访问权限
对于以 Android 10 及更高版本为目标平台的应用,文件访问权限会有分区的限制,分为内部存储和外部存储
内部存储: /data 目录。一般我们使用getFilesDir() 或 getCacheDir() 方法获取本应用的内部储存路径,读写该路径下的文件不需要申请储存空间读写权限,且卸载应用时会自动删除。
外部储存:/storage 或 /mnt 目录。一般我们使用getExternalStorageDirectory()方法获取的路径来存取文件。
我们访问不到了sdcard的根目录的路径,但是可以访问一些外部存储中公共的位置
照片、视频、音频这类媒体文件。使用MediaStore 访问,访问其他应用的媒体文件时需要READ_EXTERNAL_STORAGE权限。
适配
可以在清单文件中添加配置,这样就可以不用适配了,但是只是权宜之计吧,以后肯定是要适配的,不如一步到位.
android:requestLegacyExternalStorage="true"来请求使用旧的存储模式。
1.文件
对于文件之前我们都是存放在Environment.getExternalStorageDirectory(),那以后就放在getExternalFilesDir(),或者getExternalCacheDir()即可,这两个位置为我们的沙盒目录,跟随APP的存在而存在,卸载而删除,
2.资源
对于图片,视频等资源,可使用使用MediaStore,将文件存至对应的媒体类型中(图片:MediaStore.Images ,视频:MediaStore.Video,音频:MediaStore.Audio)需要申请权限
READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO
后台访问定位
与iOS系统一样,Q中也加入了后台位置权限ACCESS_BACKGROUND_LOCATION,如果应用需要在后台时也获得用户位置(比如滴滴),就需要动态申请ACCESS_BACKGROUND_LOCATION权限。
设备唯一标识符的变更
从 Android Q 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE
签名权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。