0%

Android开发 | Android11版本新特性

Android11版本新特性

Android 11版本中 对权限部分做了较大的变化

1. 取消 拒绝 并不在询问选项

​ 但不意味着没有 永久拒绝了,取而代之的是 如果一个权限用户拒绝了两次 那么Android系统会自动将其视为“拒绝并不再询问”来处理

2. 引入权限过期机制

​ 本来用户授予了应用程序某个权限,该权限会一直有效,现在如果某应用程序很长时间没有启动,Android系统会自动收回用户授予的权限,下次启动需要重新请求授权。

3.针对摄像机、麦克风、地理定位这3种权限提供了单次授权的选项

​ Android 11针对摄像机、麦克风、地理定位这3种权限提供了单次授权的选项。因为这3种权限都是属于隐私敏感的权限,如果像过去一样用户同意一次就代表永久授权,可能某些恶意应用会无节制地采集用户信息。在Android 11中请求摄像机权限,界面如下图所示

image-20210528201655386

4.引入后台服务属性(需要适配)

​ Android 10系统首次引入了android:foregroundServiceType属性,如果你想要在前台Service中获取用户的位置信息,那么必须在AndroidManifest.xml中进行以下配置声明:

1
2
3
4
5
<manifest>
...
<service ...
android:foregroundServiceType="location" />
</manifest>

​ 而在Android 11系统中,这个要求扩展到了摄像机和麦克风权限。也就是说,如果你想要在前台Service中获取设备的摄像机和麦克风数据,那么也需要在AndroidManifest.xml中进行声明:

1
2
3
4
5
<manifest>
...
<service ...
android:foregroundServiceType="location|camera|microphone" />
</manifest>

5. 新的权限 ACCESS_BACKGROUND_LOCATION (需要适配)

​ Android 10系统中引入了一个新的权限:ACCESS_BACKGROUND_LOCATION,用于允许应用程序在后台请求设备的位置信息。不过这个权限是不可以单独申请的,而是要和ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION一起申请才行。这个也很好理解,怎么可能连前台请求位置信息都没同意呢,就允许在后台请求位置信息了。

在Android 10系统中,如果我们同时申请前台和后台定位权限,那么将会出现如下界面:

可以看到,界面上的选项有些不同,“始终允许”表示同时允许了前台和后台定位权限,“仅在使用此应用时允许”表示只允许前台定位权限,“拒绝”表示都不允许

但是如果我们在Android 11系统中同时申请前台和后台定位权限会怎么样呢?很遗憾地告诉你,会崩溃。

因为Android 11系统要求,ACCESS_BACKGROUND_LOCATION权限必须单独申请,并且在那之前,应用程序还必须已经获得了ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限才行。

6. 权限申请对话框 允许取消

​ 权限申请对话框 在Android 11 中允许取消了,如果用户取消了权限对话框,将会视为一次拒绝。