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