AppContext.java 4.33 KB
package com.shunzhi.parent;

import android.content.Intent;
import android.util.Log;

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.share.mvpsdk.global.GlobalApplication;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;

/**
 * Created by Administrator on 2018/3/7 0007.
 */

public class AppContext extends GlobalApplication {
    private static AppContext appContext;

    public final static int LOCATION_CITYNAME=0x00;

    public String cityName="";

    public static AppContext getInstance() {
        return appContext;
    }

    //声明AMapLocationClient类对象
    public AMapLocationClient mLocationClient = null;

    //声明AMapLocationClientOption对象
    public AMapLocationClientOption mLocationOption=null;

    @Override
    public void onCreate() {
        appContext=this;
        super.onCreate();
        //开启地图地位
        initMapLocal();
    }

    private void initMapLocal() {
        //初始化定位
        mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
        mLocationClient.setLocationListener(mLocationListener);

        //初始化AMapLocationClientOption对象
        mLocationOption = new AMapLocationClientOption();
        /**
         * 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
         */
        mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
        //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
        //设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。
//        mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving);
        //设置定位模式为AMapLocationMode.Device_Sensors,仅设备模式。
//        mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors);

        //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
        mLocationOption.setInterval(1000);
        //设置是否允许模拟位置,默认为true,允许模拟位置
        mLocationOption.setMockEnable(true);
        //单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
        mLocationOption.setHttpTimeOut(20000);
        //关闭缓存机制
        mLocationOption.setLocationCacheEnable(false);
        if (null!=mLocationClient)
            mLocationClient.setLocationOption(mLocationOption);
        //启动定位
        startLocation();

    }

    public void startLocation(){
        //启动定位
        if (null!=mLocationClient){
//            mLocationClient.setLocationOption(mLocationOption);
            //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
            stopLocation();
            mLocationClient.startLocation();
        }else initMapLocal();
    }

    public void stopLocation(){
        if (null!=mLocationClient)mLocationClient.stopLocation();
    }

    public void destoryLocation(){
        if (null!=mLocationClient)mLocationClient.onDestroy();
    }

    //声明定位回调监听器
    public AMapLocationListener mLocationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation aMapLocation) {
            if(null!=aMapLocation){

                if (aMapLocation.getErrorCode()==0){
                    cityName=aMapLocation.getCity();
                    aMapLocation.getCityCode();
                    Log.d("mlocation:","handler="+handler);
                    Intent intent=new Intent();
                    intent.setAction(LOCATION_CITYNAME+"");
                    sendBroadcast(intent);
                    stopLocation();
                }else {
                    cityName="定位失败";
                    Log.d("mlocation:","errorCode="+aMapLocation.getErrorCode()+"errorInfo="+aMapLocation.getErrorInfo());
                }

            }
        }
    };

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        //设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。
        mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving);

    }

}