首先后台运行,使用service,因为只需要获取经纬度,所以使用了Android系统定位api

public class MapService extends Service {
    private upService upService;
    private AMapLocationClient mlocationClient;

    @Override
    public void onCreate() {
        upService = new upService();
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        timerhandler();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private void timerhandler(){
        final Handler mHandler = new Handler();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                initLocationOption();
                //每隔10s循环执行run方法
                mHandler.postDelayed(this, 10000);
            }
        };

        //主线程中调用:
        mHandler.postDelayed(r, 100);//延时100毫秒
    }

    /**
     * 使用高德地图api
     **/
    private void initLocationOption() {
        //初始化定位
        mlocationClient = new AMapLocationClient(this);
        //初始化定位参数
        AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
        //设置定位回调监听
        mlocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {

                 double lat = aMapLocation.getLatitude();//获取纬度
                 double lng = aMapLocation.getLongitude();

                  upService.setDeliveryManLocation(employid,lat,lng);

                if(null != mlocationClient){
                    mlocationClient.onDestroy();
                }
            }
        });
        //设置为高精度定位模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位参数
        mlocationClient.setLocationOption(mLocationOption);
        // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
        // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
        // 在定位结束后,在合适的生命周期调用onDestroy()方法
        // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
        mlocationClient.startLocation();//启动定位
    }
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐