「我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
前言
关于android位置相关的权限主要有:
ACCESS_COARSE_LOCATION:大致位置(主要用于网络定位,根据基站、Wi-Fi等信息获取位置信息)
ACCESS_FINE_LOCATION:精确位置(主要用于GPS定位)
ACCESS_BACKGROUND_LOCATION:后台权限(API 29新增,在后台访问位置信息时所需要的权限)
主要不同点
主要涉及到的变更版本是android 6以下版本、android 6(API级别 23)及以上版本、android 10 (API级别 29)和android 11(API级别 30)及以上版本。
android 6以下
android 6以下对于权限的申请并没有什么特殊的要求,只要在AndroidManifest.xml中声明即可。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
android 6(API 级别 23)及以上
android 6版本添加了应用权限的区分限制,针对于危险权限需要进行动态申请。涉及到的位置权限ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION都需要进行动态申请才能授予。
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION};
ActivityCompat.requestPermissions(this, permissions, 1);
}
android 10(API 级别 29)
在 Android 10(API 级别 29)中,新增了ACCESS_BACKGROUND_LOCATION后台权限。必须在应用的AndroidManifest.xml清单中声明 ACCESS_BACKGROUND_LOCATION权限,应用在后台时才可以返回位置信息,并且需要进行动态申请位置相关权限。
在android 10中三个权限可以进行同时申请,当运行在android 10的设备上,应用在请求后台访问位置信息时,系统权限对话框中会包含一个始终允许的选项。如果选择此选项,应用中就可以获得在后台访问位置信息的权限。
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
android 11(API 级别 30)及以上
android 11及以上版本申请权限时系统对话框不存在始终允许的选项,并且只能够在系统设置页面打开后台权限。如果同时申请这三个权限时不会弹窗,系统会忽略权限请求,不会授予其中的任一权限。在android 11级以上版本需要先申请ACCESS_COARSE_LOCATIO和ACCESS_FINE_LOCATION后再申请ACCESS_BACKGROUND_LOCATION权限,才能确保前台访问位置权限和后台访问位置权限正常。
总结
主要就是动态申请和android 10版本之后申请后台权限的区别。
在最后祝大家假期快乐,虎年吉祥~
题外话:终究是没等到南京的第一场雪!喜欢冬天,因为它是一个浪漫的季节,有雪~ 阖家欢乐的春节也在这个季节。