Android定位功能实现
关于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定位功能实现相关推荐
- 基于百度地图实现Android定位功能实现(详解+教程)
基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...
- Android定位功能(二)
在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...
- 基于百度地图实现Android定位功能实现
基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...
- android 定位功能的实现
在Android开发其中.常常须要用到定位功能,尤其是依赖于地理位置功能的应用.非常多人喜欢使用百度地图,高德地图提供的sdk.开放API,可是在只须要经纬度,或者城市,街道地址等信息.并不须要提供预 ...
- Android 定位功能简单实现
文章目录 背景 实现方式 实现关键代码 结果验证图示 背景 在个人 App:Hi朋友中完善天气查询功能时,需要定位用户当前所在的城市,需要用到手机的定位功能.让用户打开天气查询页时,能够自动定位当前所 ...
- Android定位功能开发(1)——获取位置
基于位置的服务包括三个方面:获取位置.地图服务.地理编码服务. 获取位置有两种方式,一种是通过GPS获得位置,精度高,耗电高,另一种是通过WLAN或通讯基站获得位置,精度低,耗电低.得到的位置信息是三 ...
- Android定位功能开发(3)——地图服务(地图点与经纬度)
基本的地图服务包括三项功能: 让地图显示某个经纬度位置: 获取地图上某个点的经纬度: 在地图上标注出某个位置. 要让地图显示某个经纬度位置,步骤是:获取BaiduMap对象.设置位置.动画显示. 代码 ...
- android定位:获取当前位置的经纬度
Android定位主要使用的是基于位置服务(Location Based Service)技术,有了 Android 系统作为载体,我们可以利用定位出的位置进行许多丰富多彩的操作,比如定位城市,根据我 ...
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...
- Android利用百度地图API实现定位功能(记录)
本篇主要介绍一下如何使用百度地图API来实现定位以及地图的基本使用. 效果图如下: 步骤如下: 一.申请APIKey. (1)注册百度账号并申请开发者资质:http://developer.baidu ...
最新文章
- 移动互联网教育领域或将出现新的风口?
- 大数据 互联网架构阶段 Nginx的使用
- 使用SAP OData服务创建销售订单
- maftools|TCGA肿瘤突变数据的汇总,分析和可视化
- subtext blog装好了,老外的文档还是写的有些问题
- JS里的居民们5-数组(栈)
- 想换机的再等等!低价iPhone9或将推迟发布
- 正则表达式基本语法规范
- Suggestion: add 'tools:replace=android:value' to meta-data element at AndroidManifest.xml:25:5-2...
- CANape 20拍了拍你,更新速递请查收~
- 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办,鼠标键盘不能用解决方法...
- 关于Keil4 C51版本可以编译但是无法完成编译的问题解决
- MAC 破解百度网盘限速
- C / C++ function - rand
- 计算机排线知识,宏利工程师为您讲解笔记本电脑触摸板软排线FFC的知识点[宏利]...
- 各有风采:影响全世界的100位帝王排行榜
- VTK中oberver 和 command 的信息机制详解
- 「eBay大赛专访特辑」第一轮淘汰在即!已经有同学出单$2500!
- 《延禧攻略》知识点整理,没看剧的看思维导图就够啦
- python 拆分excel工作表_Python合并拆分excel