高德定位模块使用说明

权限和KEY

在AndroidManifest.xml添加权限,如果仅使用定位功能,其他不需要的权限可去掉。

<!-- Normal Permissions 不需要运行时注册 -->
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/><!-- 请求网络 -->
<uses-permission android:name="android.permission.INTERNET"/><!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK"/><!-- 需要运行时注册的权限 -->
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 用于提高GPS定位速度 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读取缓存数据 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 更改设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/><!--如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

在AndroidManifest.xml的application中添加APSService和KEY

<!-- 设置key -->
<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="您申请的key"/> <serviceandroid:name="com.amap.api.location.APSService"android:foregroundServiceType="location" />

添加依赖

在相关下载-Android 定位SDK|高德地图API (amap.com)下载对应的jar,直接导入到项目libs

在app的build.gradle添加依赖

dependencies {implementation fileTree(dir: "libs", include: ["*.jar"])
}

代码

/***    author : 吴明辉*    e-mail : 1412378121@qq.com*    date   : 2022/3/2213:55*    git    : https://gitee.com/yunianvh*    desc   :*/import androidx.fragment.app.FragmentActivity
import com.amap.api.location.AMapLocation
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.amap.api.location.AMapLocationListener
import com.yangchoi.lib_base.utils.LogUtil.e
import java.io.File
import java.io.FileWriter
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.*class LocationManager(context: FragmentActivity?,private val offlineSavePath: String?,locationCallBack: LocationCallBack?
) {//声明AMapLocationClient类对象private var mLocationClient: AMapLocationClient? = nullprivate var DATE_FORMAT = SimpleDateFormat("yyyyMMdd")private var todayName: String? = nullvar isSaveOfflineLocation: Boolean = falsecompanion object {private val TAG = LocationManager::class.java.simpleName}//回调信息对象class LocationBean {var time: Long? = nullvar latitude: Double? = nullvar longitude: Double? = nullvar address: String? = nullvar locationDetail: String? = null}//回调interface LocationCallBack {fun onLocationInfo(locationBean: LocationBean?)}//声明定位回调监听器private var mLocationListener = AMapLocationListener { aMapLocation ->if (aMapLocation != null) {e(TAG, "onLocationChanged   errorCode: [ " + aMapLocation.errorCode + " ]")if (aMapLocation.errorCode == 0) {val gpsAccuracyStatus = aMapLocation.gpsAccuracyStatus //0差  1好  -1未知val locationType =aMapLocation.locationType //0失败 1gps 2前次定位 4:缓存 5:wifi 6:基站 8:离线  9:缓存val accuracy = aMapLocation.accuracy //精度val gpsSatellites = aMapLocation.satellites //搜星数val trustedLevel = aMapLocation.trustedLevel //定位可信度  1好 2正常 3低 4差val speed = aMapLocation.speed //速度val locationDetail ="卫星信号强度:$gpsAccuracyStatus  定位类型:$locationType  精度:$accuracy  gps搜星数:$gpsSatellites  可信度:$trustedLevel  速度:$speed"e(TAG, "onLocationChanged : $locationDetail")//去掉离线缓存if (locationType == AMapLocation.LOCATION_TYPE_FIX_CACHE || locationType == AMapLocation.LOCATION_TYPE_LAST_LOCATION_CACHE) {return@AMapLocationListener}//通过回调接口返回回去var bean = LocationBean()bean.time = aMapLocation.timebean.latitude = aMapLocation.latitudebean.longitude = aMapLocation.longitudebean.address = aMapLocation.addressbean.locationDetail = locationDetaillocationCallBack!!.onLocationInfo(bean)//保存经纬度到本地文件(长链接没有连接时)saveOfflineLocation(aMapLocation.latitude, aMapLocation.longitude)} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。e(TAG, "location Error, ErrCode:"+ aMapLocation.errorCode+ ", errInfo:"+ aMapLocation.errorInfo)}}}//isSaveOfflineLocation=true保存经纬度到本地,false不保存fun isSaveOfflineLocation(isSaveOfflineLocation: Boolean) {this.isSaveOfflineLocation = isSaveOfflineLocation}//本地保存经纬度private fun saveOfflineLocation(lat: Double, lon: Double) {if (offlineSavePath!!.isBlank() || !isSaveOfflineLocation) returne(TAG, "saveOfflineLocation 保存经纬度: $lat,$lon")val todayPath: String = offlineSavePath + todayNameval locFile = File(todayPath)try {if (!locFile.exists()) locFile.createNewFile()val time = System.currentTimeMillis() / 1000val strData = "$time,$lat,$lon;"// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件val writer = FileWriter(todayPath, true)writer.write(strData)writer.close()} catch (e: IOException) {e.printStackTrace()}}fun startLocation() {mLocationClient!!.startLocation()//启动定位}fun stopLocation() {mLocationClient!!.stopLocation() //停止定位后,本地定位服务并不会被销毁}init {//获取当天时间用于本地保存的文件名val format = DATE_FORMAT.format(Date())todayName = File.separator + "$format.txt"if (mLocationClient != null) {e(TAG, "mLocationClient != null")} else {//初始化定位mLocationClient = AMapLocationClient(context)//声明AMapLocationClientOption对象val locationOption = AMapLocationClientOption()locationOption.locationMode =AMapLocationClientOption.AMapLocationMode.Hight_AccuracylocationOption.interval = (10 * 1000).toLong()locationOption.isSensorEnable = true//给定位客户端对象设置定位参数mLocationClient!!.setLocationOption(locationOption)//设置定位回调监听mLocationClient!!.setLocationListener(mLocationListener)}}
}

调用

在调用之前要确保权限已打开,推荐用PermissionX打开权限

 var c = LocationManager(this, null, null)c.startLocation()c.isSaveOfflineLocation(false)

PermissionX申请权限

记得添加依赖:com.permissionx.guolindev:permissionx:1.3.0

PermissionX.init(this).permissions(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
).onExplainRequestReason { scope: ExplainScope, deniedList: List<String?>? ->scope.showRequestReasonDialog(deniedList,"需要您同意以下授权才能正常使用定位功能","同意","拒绝")
}.request { allGranted: Boolean, grantedList: List<String?>?, deniedList: List<String?> ->if (allGranted) {Toast.makeText(this, "您同意了所有权限!", Toast.LENGTH_SHORT).show()// 获取系统的LocationManager服务var c = LocationManager(this, null)c.startLocation()} else {Toast.makeText(this, "您拒绝了以下权限:$deniedList", Toast.LENGTH_SHORT).show()}
}

工作笔记:Android高德定位使用说明相关推荐

  1. android 高德定位

    android 高德定位 今天所分享的是一个简单的高德定位,就是简单的获取当前的位置,可能高德导航要好玩点,但是目前暂未有那方面的需求,所以就只是用到了高德的一个定位.其实高德文档已经写得差不多了,但 ...

  2. android 高德定位 区域,区域定位-行政区划浏览-示例中心-JS API UI 组件示例 | 高德地图API...

    区域定位 html, body, #container { width: 100%; height: 100%; margin: 0px; } #locTip { position: absolute ...

  3. 工作笔记 - Android make文件学习(主要是编译Android apk)

    1.MyTest编译到package/apps下(预置带有源码的apk) □在alps/device/qcom/common/base.mk(这里用的是高通机子,其他的系统,如mtk,mk文件的位置视 ...

  4. android高德定位sdk,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...

    /*** * 定位*/ private voidshowLocation() {try{ mlocationClient= new AMapLocationClient(this); mLocatio ...

  5. #工作笔记 Android歌词视频开发

    前言 入职半年承接的第一个重要需求就是做一个可以任意切换背景,生成自带歌词和音乐的视频,用户导出后保存至相册,下面记录开发过程中遇到的几个有意义的问题和创新. 创新1:实时根据解析的得到的该行歌词时间 ...

  6. Android 高德地图(带有定位和点击显示经度纬度)

    Android高德地图测试,如下: 1.Android高德地图Demo地址下载:       下载android高德地图Demo 1.2 Android定位SDK 一键下载 1.3 下载好的文件zip ...

  7. Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!

    这几天的项目不是非常紧.于是想为未来可能要做的项目做一些技术储备. 下一个项目非常有可能是定位开发,须要用到手机定位功能,于是查了查如今比較流行的第三方定位,最火的基本上就是百度定位>高德定位& ...

  8. AndroidStudio_安卓原生开发_蓝牙扫描设备_另一种方法---Android原生开发工作笔记145

    下面的一个方法是之前写的,但是那种方法有时候会有扫描不到的情况,现在再写一种,这种方法,更简单有效一些. AndroidStudio安卓原生开发_Android扫描附近指定的蓝牙设备_通过设备名称过滤 ...

  9. android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...

    Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 现在通过Gradle集成SDK(也可以使用jar包) ...

最新文章

  1. 资源|2018年14个顶级AI和机器学习会议名录
  2. Android开发 Butterknife使用方法总结
  3. location和location.href跳转url的区别
  4. KVM中vhost-user简介(十三)
  5. CentOS6.4安装包初识
  6. Python-进程相关概念
  7. 《程序设计技术》第九章例程
  8. 【JAVA】doc,excel,等转pdf,swf
  9. excel练习1——数据透视表基础介绍
  10. 至强服务器性能排行,英特尔至强处理器排名天梯 至强cpu天梯2020排名
  11. MQTT Qos详解(一)
  12. Android自定义View--Flyme6的Viewpager指示器
  13. 肾囊肿平时要注意什么饮食?
  14. python 等值线_绘图系列(1):利用matplotlib绘制等值线图
  15. 《教育学原理》知识框架整理
  16. 蓝桥杯第九届省赛B组c/c++
  17. 数据集成平台,多数据统一存储和管理
  18. [开源项目]基于FPGA的视频图像拼接融合
  19. python如何爬取动态网页数据
  20. 蓝桥杯 天干地支 python组

热门文章

  1. 在Qt中使用OpenGL(四)
  2. chariot iperf使用_ixchariot吞吐量测试
  3. 动手创建docker镜像
  4. 服务器心跳信号,服务器心跳攻击
  5. RationalDMIS 7.1建立工件坐标系的过程:必须尊守321法则
  6. 如何使用开源工具「DataEase」制作一个高质量的仪表板
  7. Python中使用表情符emoji
  8. 冒泡排序动态示意【Scratch】
  9. windows下同一个显卡配置多个CUDA工具包以及它们之间的切换
  10. nagios使用nsca实现被动监控