当前位置:首页 > 资讯 > info6 > 正文

Android高德地图实现后台定位

发表于: 2017-01-13   作者:Chen_xiaobao   来源:转载   浏览:
摘要: 在项目当中,很多时候都会用到地图,百度地图是我们经常用的,下面我给大家用高德地图实现后台定位,这样可以实现轨迹的路线:publicclassLocationServiceextendsService{ //声明mLocationOption对象,定位参数 publicAMapLocationClientOptionmLocationOption=newAMapLocationClientOptio

在项目当中,很多时候都会用到地图,百度地图是我们经常用的,下面我给大家用高德地图实现后台定位,这样可以实现轨迹的路线:

public class LocationService extends Service {
    //声明mLocationOption对象,定位参数
    public AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
    //标识,用于判断是否只显示一次定位信息和用户重新定位
    private boolean isFirstLoc = true;
    //声明AMapLocationClient类对象
    public AMapLocationClient mLocationClient = null;
    private AMapLocation amapLocation;
    private Timer mTimer = null;
    private TimerTask mTimerTask = null;
    private boolean isStop = false;
    public   int intTimer=300;
    public  String strIsLogin="1";

    @Override
    public void onCreate() {
        super.onCreate();
        init();
    }
    private void init() {
        //初始化定位
        mLocationClient = new AMapLocationClient(this);
        //设置定位回调监听
        mLocationClient.setLocationListener(mLocationListener);
        //设置精度模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);

        //给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);

        mLocationOption.setInterval(1000);
        //设置是否返回地址信息(默认返回地址信息)
        mLocationOption.setNeedAddress(true);
        //关闭缓存模式
        mLocationOption.setLocationCacheEnable(false);
//        //启动定位
        mLocationClient.startLocation();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 触发定时器
        if (!isStop) {
            startTimer();
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mLocationClient!=null) {
            mLocationClient.stopLocation();
        }
        super.onDestroy();
        // 停止定时器
        if (isStop) {
            stopTimer();
        }
    }
    private void startTimer() {
        isStop = true;//定时器启动后,修改标识,关闭定时器的开关
        if (mTimer == null) {
            mTimer = new Timer();
        }
        if (mTimerTask == null) {
            mTimerTask = new TimerTask() {
                @Override
                public void run() {
                    do {
                        try {
                            if (strIsLogin=="1"){
                                mLocationClient.startLocation();
                            }
                            Thread.sleep(1000*intTimer);//3秒后再次执行
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            return;
                        }
                    } while (isStop);
                }
            };
        }
        if (mTimer != null && mTimerTask != null) {
            mTimer.schedule(mTimerTask, 0);//执行定时器中的任务
        }
    }
    /**
     * 停止定时器,初始化定时器开关
     */
    private void stopTimer() {
        if (mTimer != null) {
            mTimer.cancel();
            mTimer = null;
        }
        if (mTimerTask != null) {
            mTimerTask.cancel();
            mTimerTask = null;
        }
        isStop = false;//重新打开定时器开关
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //声明定位回调监听器
    public AMapLocationListener mLocationListener = new AMapLocationListener() {
        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public void onLocationChanged(AMapLocation aMapLocation) {
            if (aMapLocation != null) {
                if (aMapLocation.getErrorCode() == 0) {
                    //可在其中解析amapLocation获取相应内容。
                    aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                    aMapLocation.getLatitude();//获取纬度
                    aMapLocation.getLongitude();//获取经度
                    aMapLocation.getAccuracy();//获取精度信息
                    aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                    aMapLocation.getCountry();//国家信息
                    aMapLocation.getProvince();//省信息
                    aMapLocation.getCity();//城市信息
                    aMapLocation.getDistrict();//城区信息
                    aMapLocation.getStreet();//街道信息
                    aMapLocation.getStreetNum();//街道门牌号信息
                    aMapLocation.getCityCode();//城市编码
                    aMapLocation.getAdCode();//地区编码
                    aMapLocation.getAoiName();//获取当前定位点的AOI信息

         //这个是请求数据的接口:
                    double lat = aMapLocation.getLatitude();
                    double lng = aMapLocation.getLongitude();
                    String gps_url = MyURL.loginUrl+String.format("gps.ashx?userid=%s&x=%s&y=%s&position=%s&company=%s&address=%s&state=%s&remark=%s",
                            MyURL.no,lng,lat,"5",MyURL.company, aMapLocation.getStreet(),"0","0");
                    String m = MyHttpUtils.getTextFromUrl(gps_url);
                   
                    }
                    // 应该停止客户端再发送定位请求
                    if (mLocationClient.isStarted()) {
                        mLocationClient.onDestroy();
                    }
在这里我写了一个定时器,通过3秒钟进行一次经纬度的回传,

有不懂得可以直接在评论里写出来  我会给大家进行解答


Android高德地图实现后台定位

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号