package com.dahe.gldriver.utils

import android.content.Context
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.amap.api.location.AMapLocationListener



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)

        //给定位客户端对象设置定位参数
        mLocationClient?.setLocationOption(mLocationOption);
        if(null != mLocationClient){
            mLocationClient?.setLocationOption(mLocationOption);
            //设置场景模式后最好调用一次stop，再调用start以保证场景模式生效
            mLocationClient?.stopLocation()
            mLocationClient?.startLocation()
        }
    }
    fun stopLocation(){
        if(null != mLocationClient){
            mLocationClient?.stopLocation()
        }
    }
}