安卓定位权限

Posted FlyClound

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓定位权限相关的知识,希望对你有一定的参考价值。

一、前言

随着安卓系统版本的变动,定位权限也多次被修改。随着变动次数的增多,但是对于不同的版本,不同的机型差异越来越大,在处理定位权限时,需要注意的地方就变多了。本篇主要记录对不同安卓版本,不同厂商机型定位权限的适配。

二、当前的定位权限

<!-- Allows an app to access approximate location.  近似定位权限,api1,如:网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- Allows an app to access precise location 精准定位权限,api1,如:GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- Allows an app to access location in the background. 后台定位权限,api29,android10新增 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  1. 网络定位权限属于:ACCESS_COARSE_LOCATION
  2. GPS定位权限属于:ACCESS_FINE_LOCATION
  3. 后台定位权限:ACCESS_BACKGROUND_LOCATION

前台定位: 网络定位和GPS定位属于前台定位,应用在前台才能使用。

后台定位: 后台定位权限,应用在后台时也能使用定位。

注意: 一般来说使用定位功能申请GPS定位就足够了,只有当App在后台也需要定位功能时,才需要申请后台定位。在Android10开始,新增了后台定位权限,如果没有申请这个权限,当App在后台时,将无法使用定位功能。

三、后台定位注意点

3.1 android10的手机上targetSDK小于android10也需要做兼

后台定位权限(ACCESS_BACKGROUND_LOCATION)十分敏感,与其他新增的权限不太一样。android10的手机上targetSDK小于android10也需要做兼。在android10以上的手机,即使targetSdkVersion小于android10,如果用户没有主动授权后台定位权限,APP处在后台也将无法获取定位。

3.2 android 10系统上,可以在同一个权限弹窗中同时申请:ACCESS_FINE_LOCATION和 ACCESS_BACKGROUND_LOCATION权限。

class MainActivity : AppCompatActivity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)
    

3.3 android 11系统上,将后台定位权限又做了一次调整。

targetSdkVersion=android11 时,不能同时申请普通定位权限和后台定位权限。
只有成功申请了 普通定位权限,才能申请后台定位权限。

  1. 直接申请后台定位权限,将不弹窗直接授权失败。
  2. 同时申请,普通定位权限和后台定位权限,将不会弹窗,直接授权失败。

四、不同厂商区别

在上面已经讲述了对于不同的安卓版本,申请权限时的区别,这里主要讲述对于不同的手机厂商,申请权限的区别,使用的安卓版本都比较新,都是安卓12版本。

4.1 华为鸿蒙系统

对于华为手机,直接申请网络定位或GPS定位即可,不需要考虑后台权限。华为定位权限只有【仅使用期间】和【始终允许】,所以直接申请就可以了。给了始终允许就代表有了后台定位权限。

  1. 单独申请ACCESS_COARSE_LOCATION,或者ACCESS_FINE_LOCATION,同时申请,都可以弹出弹窗。
  2. 不要单独申请后台定位,单独申请不会弹窗,直接授权失败。
  3. 弹窗点击禁止后,后续继续申请不会弹窗,直接授权失败,需要到系统中去设置。

4.2 小米手机

小米手机必须要先申请前台定位,只有在有了前台定位权限的情况下,才能去申请后台定位。两次申请都会有弹窗。

4.3 OPPO

必须要先申请前台定位,授权以后才能申请后台定位。并且申请后台定位的弹窗也是引导到系统设置中去开启后台定位。

4.4 VIVO

和OPPO一样,必须要先申请前台定位,授权以后才能申请后台定位。并且申请后台定位的弹窗也是引导到系统设置中去开启后台定位。

参考

Android R 11 后台定位权限没有 始终允许选项的解决方法
android定位权限适配看这篇就够了

安卓开发 百度地图怎么自动设置缩放比例

参考技术A 1.可以定位用户当前位置(6.0动态申请权限);
2.当前位置为起点,并根据获取到的终点信息,设置起点终点marker,进行路线规划,获得路线list的第一条数据使用,并在地图上overlay显示,修改默认的路径规划起点终点marker,弹出的bottomsheetdialog中文字显示(此处HTML.fromHtml());
3.将地图中心点调整为用户当前位置,并且根据起点终点距离调整到合适的缩放比例;
4.如果用户手机里安装了百度地图,点击导航,进入百度地图直接导航;如果用户未安装百度地图,则提示用户去安装百度地图(跳转到商店,进入百度地图安装页),或者打开浏览器导航。
5.定位(起点)和获取地理位置编码(终点)均是异步返回的,(因为要通过起点终点的经纬度计算距离)所以需要先得到一个,再去获取另一个,获取到第二个以后去设置起点终点就不会出现有一个可能为空;
6.管理地图的生命周期
7.调整缩放比例走过的坑

以上是关于安卓定位权限的主要内容,如果未能解决你的问题,请参考以下文章

手机定位失败怎么办 安卓手机定位失败解决办法

7.0 启动app权限弹窗问题

安卓大学生考勤签到app毕业设计

是不是只要是安卓手机,刷机之后都无法定位?

安卓手机日志获取

基于android安卓百度地图的定位开发设计与实现.doc