137 lines
5.7 KiB
Kotlin
137 lines
5.7 KiB
Kotlin
package com.dahe.gldriver.utils
|
||
|
||
import android.annotation.SuppressLint
|
||
import android.app.Notification
|
||
import android.app.NotificationChannel
|
||
import android.app.NotificationManager
|
||
import android.app.Service
|
||
import android.content.Context
|
||
import android.graphics.Color
|
||
import android.os.Build
|
||
import com.amap.api.location.AMapLocationClient
|
||
import com.amap.api.location.AMapLocationClientOption
|
||
import com.amap.api.location.AMapLocationListener
|
||
import com.amap.api.maps.model.LatLng
|
||
import com.baidu.mapapi.utils.CoordinateConverter
|
||
import com.dahe.gldriver.R
|
||
import com.dahe.gldriver.service.MyNotification
|
||
|
||
|
||
class GDLocationUtils private constructor(){
|
||
|
||
//声明AMapLocationClient类对象
|
||
var mLocationClient : AMapLocationClient?= null;
|
||
|
||
//声明AMapLocationClientOption对象
|
||
var mLocationOption: AMapLocationClientOption? = null
|
||
|
||
|
||
companion object{
|
||
val instance = Holder.holder
|
||
}
|
||
|
||
object Holder {
|
||
val holder = GDLocationUtils()
|
||
}
|
||
|
||
fun getLocation(ctx : Context,mLocationListener : AMapLocationListener){
|
||
//初始化定位
|
||
mLocationClient = AMapLocationClient(ctx)
|
||
//设置定位回调监听
|
||
mLocationClient?.setLocationListener(mLocationListener)
|
||
//初始化AMapLocationClientOption对象
|
||
mLocationOption = AMapLocationClientOption()
|
||
|
||
/**
|
||
* 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
|
||
*/
|
||
mLocationOption?.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn)
|
||
|
||
|
||
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
|
||
mLocationOption?.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy)
|
||
// mLocationOption?.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving)
|
||
|
||
//获取一次定位结果:
|
||
//该方法默认为false。
|
||
mLocationOption?.setOnceLocation(true)
|
||
|
||
//获取最近3s内精度最高的一次定位结果:
|
||
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
|
||
mLocationOption?.setOnceLocationLatest(true)
|
||
|
||
//设置是否允许模拟位置,默认为true,允许模拟位置
|
||
mLocationOption?.setMockEnable(true)
|
||
//启动后台定位,第一个参数为通知栏ID,建议整个APP使用一个
|
||
// mLocationClient?.enableBackgroundLocation(1,buildNotification(ctx))
|
||
//给定位客户端对象设置定位参数
|
||
mLocationClient?.setLocationOption(mLocationOption);
|
||
if(null != mLocationClient){
|
||
mLocationClient?.setLocationOption(mLocationOption);
|
||
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
|
||
mLocationClient?.stopLocation()
|
||
mLocationClient?.startLocation()
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 上传轨迹专用
|
||
* @param ctx Context
|
||
* @param mLocationListener AMapLocationListener
|
||
*/
|
||
fun getLocation2(ctx : Context,mLocationListener : AMapLocationListener){
|
||
//初始化定位
|
||
mLocationClient = AMapLocationClient(ctx)
|
||
//设置定位回调监听
|
||
mLocationClient?.setLocationListener(mLocationListener)
|
||
//初始化AMapLocationClientOption对象
|
||
mLocationOption = AMapLocationClientOption()
|
||
|
||
/**
|
||
* 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
|
||
*/
|
||
mLocationOption?.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn)
|
||
|
||
|
||
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
|
||
mLocationOption?.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving)
|
||
// mLocationOption?.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving)
|
||
|
||
//获取一次定位结果:
|
||
//该方法默认为false。
|
||
mLocationOption?.setOnceLocation(true)
|
||
|
||
//获取最近3s内精度最高的一次定位结果:
|
||
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
|
||
mLocationOption?.setOnceLocationLatest(true)
|
||
|
||
//设置是否允许模拟位置,默认为true,允许模拟位置
|
||
mLocationOption?.setMockEnable(true)
|
||
//启动后台定位,第一个参数为通知栏ID,建议整个APP使用一个
|
||
mLocationClient?.enableBackgroundLocation(1,MyNotification.getInstance().getNotification(ctx))
|
||
//给定位客户端对象设置定位参数
|
||
mLocationClient?.setLocationOption(mLocationOption);
|
||
if(null != mLocationClient){
|
||
mLocationClient?.setLocationOption(mLocationOption);
|
||
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
|
||
mLocationClient?.stopLocation()
|
||
mLocationClient?.startLocation()
|
||
}
|
||
}
|
||
|
||
fun convertGPSToBaidu(srLatLng: LatLng): LatLng {
|
||
val converter = CoordinateConverter()
|
||
converter.from(CoordinateConverter.CoordType.COMMON)
|
||
converter.coord(com.baidu.mapapi.model.LatLng(srLatLng.latitude,srLatLng.longitude))
|
||
return LatLng(converter.convert().latitude,converter.convert().longitude)
|
||
}
|
||
|
||
|
||
fun stopLocation(){
|
||
if(null != mLocationClient){
|
||
mLocationClient?.disableBackgroundLocation(true)
|
||
mLocationClient?.stopLocation()
|
||
}
|
||
}
|
||
} |