Android 实现定位
(kotlin描述)
手机定位功能在人们的日常生活中,给人们(尤其是笔者这样的路痴)带来了极大的便利,而如今大部分安卓设备,已非复吴下阿蒙,不仅仅支持过去的GPS定位,还兼容了北斗、伽利略、GLONASS等全球卫星定位系统,以及网络定位技术。本文将介绍实时经纬度,以及海拔高度(波动较大,参考价值小)的获取。
确认手机是否开启“位置信息”
当手机电量低,系统开启“省电模
标题
式”的时候,首当其冲的(多数情况下)就是“位置信息”功能,并且用户有的时候也会关闭系统的定位功能,届时所有app都无法获取定位信息,检查手机是否开启定位操作如下:
//这个是在Activity内的,context.getSystemService(LOCATION_SERVICE),不在Activity里面记得先拿到context
val mlocationManager=getSystemService(LOCATION_SERVICE) as LocationManager
//以下是检查系统是否开启GPS权限,即“位置信息”。这个检查的是系统的,不是当前app是否获得权限,即使系统开启了定位,
//当前app仍然有可能没开,别搞混了
if (!mlocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
//将前往“位置信息”开启的设置界面
startActivityForResult(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS),0)
}
确认当前app是否具有定位权限:
val LOCATION_PERMISSION=1 //这个仅仅是跟后面返回时候的onRequestPermissionsResult配合,确认是不是自己的
//返回结果,取值的时候一定一定要取大等于0的,不然会翻车
//检查是否具有高精度的定位权限
val hasLocationPermission =checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
//如果权限获得,返回就会等于PackageManager.PERMISSION_GRANTED
if (hasLocationPermission != PackageManager.PERMISSION_GRANTED) {
//requestPermissions是异步执行的,返回的结果会交到一个onRequestPermissionsResult方法里面处理
//如果权限没获得就会弹窗请求获得权限
requestPermissions(
arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION, //这里放要请求的权限列表
Manifest.permission.ACCESS_FINE_LOCATION
),
LOCATION_PERMISSION //可能会多次调用权限获取弹窗,为了返回时候知道当前返回的是哪次请求,来做出不同的
) //应对,这里传的requestCode就是用来区分不同的请求的
}
获取权限后的处理逻辑:
//这个跟上面那个方法↑↑↑是一一对应的。
//申请位置权限后,请求弹窗,用户请求的结果会在此返回,返回后刷新位置信息
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out