Android高德地图实现后台定位

来源:互联网 发布:限电插座淘宝 编辑:程序博客网 时间:2024/04/28 18:41

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

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秒钟进行一次经纬度的回传,

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


1 0