关于Android定位功能如何实现的文章实在太多,有些文章着重于Android API的用法,有些则没有整个定位实现的完整流程,有些虽然有流程,但当你按照文章中的步骤实现好之后,很可能会发现各种问题,最常见的问题就是拿不到位置信息。本文会整理Android定位实现的各个步骤,解释其中可能存在的问题,并提供一些最佳实践作为参考。

文章目录

  • 获取定位权限
    • 在AndroidManifest.xml中增加权限配置
    • 检查是否有定位权限
    • 申请权限
    • 判断请求权限结果
    • 弹框提醒用户去设置打开(可选)
    • 打开权限设置页面
  • 检查定位服务开关
    • 检查是否开启定位服务
    • 跳转定位服务设置(可选)
  • 获取位置信息的几种方式
  • 位置信息提供者Provider
    • 网络定位Provider
    • GPS定位Provider
    • 被动定位Provider
    • 判断Provider是否可用
    • 三种Provider所需的权限
    • 三种Provider对比和选取
  • 经纬度
  • 通过LocationManager获取位置信息
    • LocationManager的用法
    • 获取位置信息的流程
  • 反向地址编码
    • 什么是反向地址编码
    • 通过Geocoder实现反向地址编码
    • Geocoder的一些问题
    • 使用靠谱的第三方服务来实现反向地址编码
  • 计算距离

获取定位权限

相信大家都知道Android系统从6.0开始要求对dangerous permission在运行时动态申请权限,而定位权限也是dangerous permission,所以要获取位置信息,必须先获取定位权限。关于权限获取,有些文章建议将targetSdkVersion设置为23之前,也就是Android6.0之前。这种方式的确可以让应用自动获取权限,不需要在运行时申请,但如今Android版本都已经进化到Android 11了,很多APP最低版本都已经是6.0起跳,再把target设置成23之前,已经不大合适了,所以还是需要在运行时主动调用API来申请权限。

用原生API方式来做权限申请流程比较复杂,如果不想自己实现,也可以用一些第三方的sdk来简化申请流程,在github上随便搜一下就能搜到很多这样的repo,不过个人还是推荐用原生API来实现,一方面自由度高,另一方面github上很多实现是有bug的。运行时权限申请的一般流程可以参考我之前写过的一篇文章,https://blog.csdn.net/ccpat/article/details/51151863。这里再将定位权限申请的主要流程列举一下。

在AndroidManifest.xml中增加权限配置

在主工程或需要使用定位权限的module的AndroidManifest.xml中增加如下两条权限配置。由于manifest文件在编译时会自动合并,有多条重复的也没有关系,所以不用担心是不是工程的其他AndroidManifest.xml文件已经添加过这两条权限了。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

ACCESS_COARSE_LOCATION权限允许在APP中通过NETWORK_PROVIDER来获取粗略位置信息,而ACCESS_FINE_LOCATION则允许APP通过GPS_PROVIDER获取精确位置信息。关于NETWORK_PROVIDER和GPS_PROVIDER的概念会在后面介绍。

理论上来说如果一个应用只需要粗略位置,则只需要在AndroidManifest.xml中声明ACCESS_COARSE_LOCATION即可,不需要声明ACCESS_FINE_LOCATION。但事实是绝大多数APP都希望拿到的位置信息越精确越好,谁都不希望被用户吐槽说APP里定位不准,至于GPS定位需要消耗更多电量,忽略就好

Android定位功能实现相关推荐

  1. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  2. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...

  3. 基于百度地图实现Android定位功能实现

    基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...

  4. android 定位功能的实现

    在Android开发其中.常常须要用到定位功能,尤其是依赖于地理位置功能的应用.非常多人喜欢使用百度地图,高德地图提供的sdk.开放API,可是在只须要经纬度,或者城市,街道地址等信息.并不须要提供预 ...

  5. Android 定位功能简单实现

    文章目录 背景 实现方式 实现关键代码 结果验证图示 背景 在个人 App:Hi朋友中完善天气查询功能时,需要定位用户当前所在的城市,需要用到手机的定位功能.让用户打开天气查询页时,能够自动定位当前所 ...

  6. Android定位功能开发(1)——获取位置

    基于位置的服务包括三个方面:获取位置.地图服务.地理编码服务. 获取位置有两种方式,一种是通过GPS获得位置,精度高,耗电高,另一种是通过WLAN或通讯基站获得位置,精度低,耗电低.得到的位置信息是三 ...

  7. Android定位功能开发(3)——地图服务(地图点与经纬度)

    基本的地图服务包括三项功能: 让地图显示某个经纬度位置: 获取地图上某个点的经纬度: 在地图上标注出某个位置. 要让地图显示某个经纬度位置,步骤是:获取BaiduMap对象.设置位置.动画显示. 代码 ...

  8. android定位:获取当前位置的经纬度

    Android定位主要使用的是基于位置服务(Location Based Service)技术,有了 Android 系统作为载体,我们可以利用定位出的位置进行许多丰富多彩的操作,比如定位城市,根据我 ...

  9. Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...

  10. Android利用百度地图API实现定位功能(记录)

    本篇主要介绍一下如何使用百度地图API来实现定位以及地图的基本使用. 效果图如下: 步骤如下: 一.申请APIKey. (1)注册百度账号并申请开发者资质:http://developer.baidu ...

最新文章

  1. 移动互联网教育领域或将出现新的风口?
  2. 大数据 互联网架构阶段 Nginx的使用
  3. 使用SAP OData服务创建销售订单
  4. maftools|TCGA肿瘤突变数据的汇总,分析和可视化
  5. subtext blog装好了,老外的文档还是写的有些问题
  6. JS里的居民们5-数组(栈)
  7. 想换机的再等等!低价iPhone9或将推迟发布
  8. 正则表达式基本语法规范
  9. Suggestion: add 'tools:replace=android:value' to meta-data element at AndroidManifest.xml:25:5-2...
  10. CANape 20拍了拍你,更新速递请查收~
  11. 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办,鼠标键盘不能用解决方法...
  12. 关于Keil4 C51版本可以编译但是无法完成编译的问题解决
  13. MAC 破解百度网盘限速
  14. C / C++ function - rand
  15. 计算机排线知识,宏利工程师为您讲解笔记本电脑触摸板软排线FFC的知识点[宏利]...
  16. 各有风采:影响全世界的100位帝王排行榜
  17. VTK中oberver 和 command 的信息机制详解
  18. 「eBay大赛专访特辑」第一轮淘汰在即!已经有同学出单$2500!
  19. 《延禧攻略》知识点整理,没看剧的看思维导图就够啦
  20. python 拆分excel工作表_Python合并拆分excel

热门文章

  1. 2021-10-11 CTF-KX(第一场)-RSA10
  2. 定时器Quartz和插件pageHelper使用
  3. 利用unlocker在VMware里解锁macOS操作系统
  4. LoadRunner11下载以及详细破解说明
  5. 在CentOS中安装MySql数据库教程
  6. 图形数字化工具 - getData
  7. 安装sql server2008R2
  8. html弹窗无限循环,html恶搞之无限弹窗
  9. MDM-WIFI(QCA9377,QCA6174)
  10. 你想要的宏基因组-微生物组知识全在这(2021.8)