Android11适配

  • Post author:
  • Post category:其他


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)。



版权声明:本文为no_loafer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。