Android 11 适配指南

Android 11适配指南

Scoped Storage(分区存储)

存储分为私有存储(每个应用有内部的data/data/packageName)和共享存储(SD卡、媒体集)。

诞生的缘由

  1. 部分应用软件乱占空间,当应用被卸载时,没有同时卸载私有存储以外的。
  2. 随意读取用户/设备的隐私数据。

文件访问

文件位置所需权限访问方法卸载应用时是否移除文件
特定于应用的目录getExternalFilesDir
媒体集合(照片,音频,视频)READ_EXTERNAL_STORAGEMediaStore
下载内容(文档和电子书籍)存储访问框架(加载系统的文件选择器

详细

1.分区存储在android10中新增,但在android11中强制启用。
targetSdkVersion >= 30 ,强制实行分区存储。
AndroidManifest.xml中增加 android:requestLegacyExternalStorage="true"的适配办法已不起效果。
2.MANAGE_EXTERNAL_STORAGE 所有文件管理权限
即使有了权限也无法访问Android/data/目录下的文件。不推荐为了适配使用。
3.存储访问框架 (SAF: Storage Access Framerwork API) 改动

  • 运用 ACTION_OPEN_DOCUMENT_TREE 或
    ACTION_OPEN_DOCUMENT,无法阅读到Android/data/ 和 Android/obb/目录及其悉数子目录。
  • 运用 ACTION_OPEN_DOCUMENT_TREE无法授权拜访存储根目录、Download文件夹。

4.REQUEST_INSTALL_PACKAGES
在Android 11中当用户打开“设备不知道来历运用”的权限,app就会被杀死。该行为与强制分区存储有关,由于持有 REQUEST_INSTALL_PACKAGES 权限的运用能够拜访其他运用的Android/obb 目录。
适配方案:设备外部来历运用需要重启APP。

权限改变

单次权限授权:
每当运用与方位信息、麦克风或摄像头相关的权限时,面向用户的权限对话框会包括仅限这一次选项。

定位权限

与Android 10的差异就是将后台权限的央求分离了出来,增加了用户“回绝”的条件,避免了运用重复央求用户已回绝的权限。
后台权限:ACCESS_BACKGROUND_LOCATION
前台:ACCESS_FINE_LOCATION、 ACCESS_COARSE_LOCATION
适配方案:没有前后台的定位权限时,只能先请求前台的定位权限;有前台的方位信息权限,请求后台的定位时会跳转到对应的设置页面。

软件包可见性

束缚app随意获取其他app的信息和设备状况。避免病毒软件、间谍软件利用,引发网络垂钓、用户设备信息走漏等安全事情。
解决方法:在AndroidManifest.xml 中增加queries元素,里面增加需求可见的运用包名。
下面展示一些 内联代码片

<manifest package="com.example.app">
<queries>
<package android:name="com.tencent.mm" />; <- 指定微信包名
</queries>
...
</manifest>

或者 使用它intent

<manifest package="com.example.app">
&lt;queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>;
<provider android:authorities="com.example.settings.files" />
</queries>
...
</manifest>

粗暴适配:QUERY_ALL_PACKAGES权限

前台服务类型

Android 11中,在前台服务拜访摄像头、麦克风、定位,需求在对应的service中增加camera或microphone 服务类型。

<manifest>
...
<service
android:name="MyService"
android:foregroundServiceType="microphone|camera" />;
</manifest>

读取手机号

READ_PHONE_NUMBERS

自定义Toast

Android 11 为方针途径的运用,从后台发送自定义view的Toast音讯体系会进行屏蔽。前台运用不受影响。Toast相应的setView 和 getView也现已扔掉不主张运用。

假定要在后台运用,推荐运用默许的toast或Snackbar替代。

APK签名

V2及更高版本的签名。一同Android 11 增加了对 APK 签名方案 v4 的支撑。

AsyncTask

AsyncTask在Android 11现已不主张运用,主张迁移至kotlin的协程。
此外Handler未指定Looper的结构办法也已不主张运用。

private Handler handler = new Handler(Looper.myLooper());
// 或
private Handler handler = new Handler(Looper.getMainLooper());

SYSTEM_ALERT_WINDOW

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值