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

文章目录

定位方式

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.0

var longitude = 0.0

/**

* 获取经纬度

*

* @param context

* @return

*/

@SuppressLint("MissingPermission")

fun getLngAndLat(context: Context): String {

val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager

val providers = locationManager.allProviders

for (provider in providers) {

val location = locationManager.getLastKnownLocation(provider)

if (location != null) {

latitude = location.latitude

longitude = location.longitude

return "$longitude,$latitude"

}

}

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0F, locationListener)

val location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

if (location != null) {

latitude = location.latitude

longitude = 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

android 移动网络定位服务器地址,安卓定位方式全总结-gps定位,network定位,ip定位,基站定位...相关推荐

  1. 定位系统服务器,android系统定位服务器地址

    android系统定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时,报错路径格式不支持,挂载失败.IIS Web服务器的物理路径错误.根据可能原因进行故障排查.如 ...

  2. 安卓开启位置服务器,安卓系统打开gps定位服务器地址

    安卓系统打开gps定位服务器地址 内容精选 换一换 安卓模拟器(Android Virtual Device),简称AVD,可以模拟安卓设备并将其运行在服务器上.利用AVD,您可以对安卓应用进行原型设 ...

  3. 修改安卓定位服务器地址,修改安卓定位服务器地址

    修改安卓定位服务器地址 内容精选 换一换 状态代码由三位数字组成,第一个数字定义了响应的类别,有五种可能取值:1xx:指示信息,表示请求已接收,继续处理.2xx:成功,表示请求已被成功接收.理解.接受 ...

  4. 安卓系统改服务器地址,安卓修改定位服务器地址

    安卓修改定位服务器地址 内容精选 换一换 日志记录了系统的运行情况和功能流程的处理情况,是维护人员查看系统状态.进行问题定位的重要工具和手段.日志模块根据系统设置的日志级别,记录不同详细程度的内容,满 ...

  5. 导航定位用户向服务器发送位置请求6,gps定位服务器地址

    gps定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时,报错路径格式不支持,挂载失败.IIS Web服务器的物理路径错误.根据可能原因进行故障排查.如图1为文件系 ...

  6. 华为显示打开定位服务器地址,如何打开华为的定位服务器地址

    如何打开华为的定位服务器地址 内容精选 换一换 一次完整的HTTP请求包括域名解析.建立TCP连接.发起请求.服务器接收到请求进行处理并返回处理结果.浏览器对HTML代码进行解析并请求其他资源,以及对 ...

  7. win10系统定位服务器地址,win10系统定位服务器地址

    win10系统定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时,报错路径格式不支持,挂载失败.IIS Web服务器的物理路径错误.根据可能原因进行故障排查.如图1 ...

  8. gps怎样打开位置服务器,gps怎么开定位服务器地址

    gps怎么开定位服务器地址 内容精选 换一换 当对弹性云服务器执行绑定密钥对操作时失败.管理控制台上密钥对执行失败记录对话框中的失败记录只记录了弹性云服务器的操作历史,不会影响弹性云服务器的状态及后续 ...

  9. 酷派大神f2AGPS服务器修改,关于AGPS定位服务器地址的设置

    最近在折腾三星i8000手机的GPS,可能是由于该机器的GPS芯片的缘故(或者有其他原因),开始的时候定位很慢,不是可以看见卫星少,就是即使可见卫星数量有,但都是无法锁定而定位,经过一段时间的摸索,认 ...

  10. win7定位位置服务器,win7 定位 服务器地址

    win7 定位 服务器地址 内容精选 换一换 反向解析主要应用于自建邮箱服务器,可以提高邮箱服务器IP地址和域名的信誉度.多数垃圾邮件发送者使用动态分配或者没有注册域名的IP地址来发送垃圾邮件,以逃避 ...

最新文章

  1. rockbox主题包安装_微信主题更改流程介绍!超火的猫和老鼠、小黄人等系列等你来设置...
  2. iOS点击空白收回键盘
  3. css元素捕捉,css元素选择器
  4. Docker入门(一) - 仓库、容器、镜像、数据卷
  5. php pdo 数组,php – 使用PDO更新数组
  6. 并行中的分区Partitioner
  7. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...
  8. typeof需要注意的内容
  9. FPGA中亚稳态相关问题及跨时钟域处理
  10. excel生成多个sheet .net
  11. git reset/git checkout./撤销操作
  12. IDEA打包jar包将依赖包打包到一起
  13. 大数据-Kafka容错性
  14. OVM Manager
  15. Attempted read from closed stream
  16. column ‘_id‘ does not exis报错
  17. Eolink 征文活动- -后端研发需要的API文档工具
  18. jstree刷新数据
  19. php laravel 忘记密码,Laravel实现找回密码及密码重置,详细操作
  20. 2021CCPC上海省赛题解ABCDEGHIJK

热门文章

  1. 4x4矩阵键盘工作原理及扫描程序_4*4 矩阵键盘工作原理
  2. 分享一个最终幻想勇气启示录的脚本,能自动刷图打觉醒材料
  3. 最详细的双目摄像头测距离(深度)的原理
  4. 吉林大学超星学习通04
  5. 怎么修改android内存,安卓内存修改器怎么用?
  6. ubuntu scrt
  7. 图片双面打印顺序混乱_为什么双面打印一面是正的一面是反的?
  8. Java 爬虫系列丨(一)爬虫介绍
  9. 非合作关系设定下的多智能体强化学习
  10. PostgreSQL 存储过程(Procedures)和函数(Functions)的区别