一般我们使用的是第三方定位,因为第三方定位比较成熟,有些场景我们不需要或者不可以使用第三方定位的时候我们就需要自己去获取定位了。

文章目录

  • 定位方式
    • 1.gps和network(时效性差)
      • 1.1 使用条件
        • 1.1.1 需要开启位置服务:
        • 1.1.2 安卓6.0以上还需要开启位置权限android.permission.ACCESS_COARSE_LOCATION,android.permission.ACCESS_FINE_LOCATION
      • 1.2 代码部分
        • 1.2.1 定位工具类
        • 1.2.2 检查定位服务
        • 1.2.3 设置完成之后获取经纬度信息
    • 2.IP定位(准确性差)
    • 3.基站定位(收费)

定位方式

1.gps和network(时效性差)

1.1 使用条件

1.1.1 需要开启位置服务:

高精准度(GPS+Network)
节电(network)
仅限设备(gps)

1.1.2 安卓6.0以上还需要开启位置权限android.permission.ACCESS_COARSE_LOCATION,android.permission.ACCESS_FINE_LOCATION

1.2 代码部分

gps为卫星定位,室外定位。network室内也可以定位,但是精准度不高。在我们必须要快速获取位置信息的时候,我们加上IP定位和基站定位效果会好一些

1.2.1 定位工具类
/*** @author 程前 on 2018/9/26.* blog: https://blog.csdn.net/ch1406285246* content:* modifyNote:*/
object LocationUtils {var latitude = 0.0var longitude = 0.0/*** 获取经纬度** @param context* @return*/@SuppressLint("MissingPermission")fun getLngAndLat(context: Context): String {val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManagerval providers = locationManager.allProvidersfor (provider in providers) {val location = locationManager.getLastKnownLocation(provider)if (location != null) {latitude = location.latitudelongitude = location.longitudereturn "$longitude,$latitude"}}locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0F, locationListener)val location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)if (location != null) {latitude = location.latitudelongitude = location.longitude}return "$longitude,$latitude"}val locationListener = object : LocationListener {override fun onLocationChanged(location: Location?) {if (location != null) {latitude = location.latitude;longitude = location.longitude;}}override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}override fun onProviderEnabled(provider: String?) {}override fun onProviderDisabled(provider: String?) {}};/*** 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的* @param context* @return true 表示开启*/fun isOPen(context: Context): Boolean {val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)val gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)val network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);if (gps || network) {return true;}return false;}}
1.2.2 检查定位服务
 /*** 检查定位服务有没有开启,没有开启就引导用户去开启定位服务* */private fun checkLocation() {if (!LocationUtils.isOPen(this)) {//没有打开则弹出对话框//下面是个dialog,请自己写,我的封装dialog不贴出来val tipDialog = TipDialog(this).setTitle("提示").setContent("当前应用需要打开定位功能。\n\n请点击\"设置\"-\"定位服务\"-打开定位功能。").setLeftBtnText("取消").setRightBtnText("去设置")tipDialog.setOnBtnClickListener(object : TipDialog.OnDialogBtnClickListener {override fun onLeftBtnClicked(paramTipDialog: TipDialog?) {tipDialog.dismiss()}override fun onRightBtnClicked(paramTipDialog: TipDialog?) {tipDialog.dismiss()//跳转GPS设置界面val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivityForResult(intent, GPS_REQUEST_CODE);}}).show()}}
1.2.3 设置完成之后获取经纬度信息
 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (requestCode == GPS_REQUEST_CODE) {//做需要做的事情,比如再次检测是否打开GPS了 或者定位checkLocation()}else{val locationStr=LocationUtils.getLngAndLat(this)}}

2.IP定位(准确性差)

访问API拿到IP信息,例http://pv.sohu.com/cityjson?ie=utf-8

如果你仅仅只是需要城市,那么这样做足够了,如果你还要更详细的信息,请使用IP查询地理位置信息的API。

3.基站定位(收费)

需要选用第三方的服务进行基站定位
推荐一:google官方
推荐二:聚合API

安卓定位方式全总结-gps定位,network定位,ip定位,基站定位相关推荐

  1. Android之使用GPS和NetWork定位

    Android中使用GPS和NetWork获取定位信息 在Android中定位是属于危险权限,需要在添加Mainfest.xml中添加. <uses-permission android:nam ...

  2. Android之手机定位方式(GPS定位,网络定位,基站定位)

    从前天学习GPS定位开始,这两天断断续续都在学习Android的三种基本定位方式. 1.GPS定位(基本Android机上都会有,缺点是必须在空旷的地方才有用) 2.网络定位(NetWork,这个很多 ...

  3. 关于android定位方式

    android 定位一般有四种方法,这四种方式分别是GPS定位.WIFI定位.基站定位.AGPS定位. 1. Android GPS 需要GPS硬件支持直接和卫星交互来获取当前经纬度,这种方式需要手机 ...

  4. class 第一个元素_selenium之元素定位方式

    # Xpath定位方式,非常常用,很试用于项目结构长期不会变化的项目 可以使用以下Xpath来定位元素# 1.绝对路径定位# 2.使用元素属性定位# 3.层级与属性结合# 4.使用逻辑运算符# 5.使 ...

  5. Android定位方式和测试方法,定位方式(d16)

    一,回顾, ①selector和xpath的区别,selector是解析的html,xpth是解析的xml,所以使用selector比使用xpath快, ②定位元素的单数和复数,当使用单数定位不到元素 ...

  6. android 定位服务和wifi,android WIFI定位和基站定位实现

    android WIFI定位和基站定位实现 来源:互联网 作者:佚名 时间:2015-04-01 13:38 关于定位原理网上很多,这里就不多说了.下面说怎么实现的,直接贴代码如下:首先是Util类: ...

  7. GPS的定位原理、定位方式与协议规范

    所谓GPS即全球定位系统(英语:Global Positioning System,通常简称GPS),又称全球卫星定位系统,是一个中距离圆型轨道卫星导航系统.它可以为地球表面绝大部分地区(98%)提供 ...

  8. GPS、WiFi、基站、蓝牙(iBeacon)、AGPS几种定位方式总结

    1.GPS GPS(Global Positioning System)即全球定位系统,它是由美国研究的一种定位方式,特点是:不需要SIM卡,不需要连接网络,只要在户外,基本上就能随时随地的准确定位. ...

  9. APPIUM Android 定位方式

    原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...

最新文章

  1. html表单标签怎么使用,HTML的表单标签使用
  2. Python3 list 自定义比较函数
  3. Android SQLite开发调试工具 Android Debug Database
  4. 【微信小程序】给绑定事件传参数
  5. CVPR 2020 Oral | 妙笔生花新境界,语义级别多模态图像生成
  6. Confluence 6 通过 SSL 或 HTTPS 运行 - 创建或请求一个 SSL 证书
  7. Python就业涨薪小技巧!
  8. 面试题总结:可能是全网最好的MySQL重要知识点
  9. 苏槐: 数据治理的本质及实践
  10. 关于table表格头部固定和列固定的方式
  11. 恒生电子笔试、面试经历
  12. 洛谷P2440 木材加工 —二分答案
  13. Docker系列之八:在Dockerfile中使用多段构建Muti-stage build
  14. 【技巧】vs2019调试
  15. 21分钟Mysql入门教程
  16. java实现注销功能_8.6.2 登录注销功能的实现
  17. python画五角星和六角星程序_python画五角星和六角星程序
  18. DOSBOX运行程序
  19. 蓄电池放电容量测试方法——TFN DC-E60150蓄电池放电容量测试仪
  20. 【华为OD机试】答疑 + 注意事项

热门文章

  1. apt-get update 报错 W: Unknown Multi-Arch type 'no' for package 'compiz-core'
  2. DEseq2和edgeR的安装问题记录
  3. 备赛日记 CCPC2022 高职专场 ABDEHIJK 8/12
  4. 最简单的servlet开始学起
  5. 9月1日5G商用,你的4G变慢了吗?
  6. 计算机职称考试科目有哪些
  7. Android蓝牙4.0 BLE开发坑总结
  8. C语言中的time函数总结
  9. python图像缩放三种方法
  10. python 学习第7 ,8天