當前位置:首頁 > 資訊 > 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號
广东25选5开奖结果