欢迎使用CSDN-markdown编辑器

来源:互联网 发布:传智播客c语言教程 编辑:程序博客网 时间:2024/05/17 08:43

Android集成百度地图 在service中定时获取当前位置

第一次正儿八经的写博客,这大半夜的,还真有点小激动~好久没有写过Android方面的代码,赶上做毕设,需要使用安卓客户端并整合百度地图,和后端进行交互。开始学android的时候就一直没有接触过整合百度地图,无奈,硬着头皮看了下。

闲话少叙
需求:想要在Service定时获取当前位置

先看代码:

package *****;import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.util.Log;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;public class CopyOfLocationService extends Service{    private static final String SUSPEND_ACTION = "com.cooperatinnov.ACTION_SUSPEND";    private static final String END_ACTION = "com.cooperatinnov.ACTION_END";    public enum Status{        UPLOAD,END    }    public String TAG = "LocationService";    //定位相关    private LocationClient mLocationClient;    private MyLocationListener mLocationListener ;    private double mLatitude;    private double mLongitude;    private boolean doFlag = true;    @Override    public void onCreate() {        super.onCreate();        initLocation();    }    @Override    public IBinder onBind(Intent intent) {        return new MyBinder();    }    public class MyBinder extends Binder {    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        doFlag = intent.getBooleanExtra("doFlg", false);        Log.e(TAG, "doFlag:" + doFlag);        if (doFlag) {            startTimer();        }        return super.onStartCommand(intent, flags, startId);    }    /**     * 定时任务     */    public void startTimer(){        Timer timer = new Timer();        TimerTask task = new TimerTask() {            @Override            public void run() {                if (doFlag) {                    if (!mLocationClient.isStarted()) {                        mLocationClient.start();                    }                }            }        };        timer.schedule(task, 0, 5000);    }    private void initLocation() {        //初始化LocationClient类        mLocationClient = new LocationClient(getApplicationContext());        mLocationListener = new MyLocationListener();        mLocationClient.registerLocationListener(mLocationListener);        //配置定位SDK参数        LocationClientOption option = new LocationClientOption();        //设置精度        option.setLocationMode(com.baidu.location.LocationClientOption.LocationMode.Hight_Accuracy);        //设置返回的定位结果坐标系/设置坐标类型        option.setCoorType("bd0911");//      option.setCoorType("bd09ll");//注意和上句话的不同,此为大坑。。        //设置是否需要地址信息,默认为无地址        option.setIsNeedAddress(true);        //设置是否打开gps进行定位        option.setOpenGps(true);        //设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效//      option.setScanSpan(1000);        mLocationClient.setLocOption(option);    }    /**     * 定位SDK监听函数     */    public class MyLocationListener implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            //销毁后不在处理新接收的位置            if (location == null) {                return;            }            //更新经纬度            mLongitude = location.getLongitude();            mLatitude = location.getLatitude();            Log.e(TAG, "经纬度"+mLatitude+","+mLongitude);            //-----可以在此处添加逻辑代码(如上传位置到服务器的代码)-----            //            //        }    }    @Override    public void onDestroy() {        // 退出时销毁定位        mLocationClient.stop();        super.onDestroy();    }}

代码基本都有注释,不再赘述了,有问题和指教请直接留言。。
要格外注意注释中的大坑 坑了我好久的地方
有不对的地方希望大家多多指出,一起学习!

0 0
原创粉丝点击