https://developer.android.google.cn/preview/privacy/storage
1.用户权限授权
(1)应用请求位置信息、麦克风、摄像头时,系统会弹出“仅限这一次”选项,属于临时授权,下次使用会再次提示用户授权。
(2)自动重置未使用应用权限,几个月不使用的应用,被授予的权限自动恢复为重新授权状态。
如果想避免自动被重置权限(如:同步数据、与智能设备通信、与配套设备匹配),可以引导用户Intent跳转到Settings.ACTION_APPLICATION_DETAILS_SETTINGS 进行设置。调用 isAutoRevokeWhitelisted()判断权限是否被授予。
(3)读取电话号码相关权限更改
<uses-permission android:name="READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="READ_PHONE_NUMBERS" />
2.存储(分区存储)
(1)API30之前可以使用requestLegacyExternalStorage进行适配,默认选用老的存储架构,Android11会自动忽略,会强制执行分区存储策略。
(2)preserveLegacyExternalStorage 设置为true,用于数据迁移,可以使应用保留原有的存储模型,只在卸载应用前有效,重新安装应用将启用新模型。系统不建议使用。
(3)存储:
外部存储:1.应用私有存储区,android/包名,不需要存储权限即可,随着应用删除而被删除
getExternalFilesDir():/storage/emulated/0/Android/data/packname/files
getExternalCacheDir():/storage/emulated/0/Android/data/packname/cache
2.MediaStroe: Media.Audio、Media.Video、Media.Images、Media.Downloads, 存储在用户手机上,不随应用删除
3.SD别的目录,使用SAF框架
内部存储:1.sp
2.数据库
3.getFilesDir():/data/user/0/packname/files
4.getCacheDir():/data/user/0/packname/cache
3.Andorid11软件包的可见性(查询设备上的其他应用方式改变)
(1)清单文件中配置用来指定要交互或者访问的应用包名或者intent签名。
eg: <queries>
<package android:name="com.example.store" />
<package android:name="com.example.services" />
</queries>
或者
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
(2)针对intent隐式打开应用时,为了避免出现ActivityNotFoundException异常,添加捕获异常操作。
<intent>
<action android:name="android.intent.action.VIEW" />
<!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". -->
<data android:mimeType="application/pdf" />
</intent>
并且使用intent时进行显示activity是否可用resolveActivity(),
类似用例参考官方用例:https://developer.android.google.cn/preview/privacy/package-visibility-use-cases
4.Android11前台服务类型
(1)Android9开始,应用仅限于在前台访问摄像头和麦克风,Android11改变了在前台服务中访问摄像头和麦克风相关数据的方式,需要在foregroundServiceType 属性中添加新的 camera 和 microphone 类型。
eg: <service ... android:foregroundServiceType="location|camera" />
<service ... android:foregroundServiceType="location|camera|microphone" />
5.Scudo Hardened Allocator
(1)Android11内部使用的堆分配提供服务,报错提示Scudo ERROR:,可查阅 Scudo 问题排查文档(https://source.android.google.cn/devices/tech/debug/scudo#Troubleshooting)。