package com.bdyjy.util.baidumapservice;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import android.content.Context;
/**
*
* @author baidu
*
*/
public class LocationService {
private LocationClient client = null;
private LocationClientOption mOption,DIYoption;
private Object objLock = new Object();
/***
*
* @param locationContext
*/
public LocationService(Context locationContext){
synchronized (objLock) {
if(client == null){
client = new LocationClient(locationContext);
client.setLocOption(getDefaultLocationClientOption());
}
}
}
/***
*
* @param listener
* @return
*/
public boolean registerListener(BDLocationListener listener){
boolean isSuccess = false;
if(listener != null){
client.registerLocationListener(listener);
isSuccess = true;
}
return isSuccess;
}
public void unregisterListener(BDLocationListener listener){
if(listener != null){
client.unRegisterLocationListener(listener);
}
}
/***
*
* @param option
* @return isSuccessSetOption
*/
public boolean setLocationOption(LocationClientOption option){
boolean isSuccess = false;
if(option != null){
if(client.isStarted())
client.stop();
DIYoption = option;
client.setLocOption(option);
}
return isSuccess;
}
public LocationClientOption getOption(){
return DIYoption;
}
/***
*
* @return DefaultLocationClientOption
*/
public LocationClientOption getDefaultLocationClientOption(){
if(mOption == null){
mOption = new LocationClientOption();
mOption.setLocationMode(LocationMode.Hight_Accuracy);//可�?�,默认高精度,设置定位模式,高精度,低功�?�,仅设�?
mOption.setCoorType("bd09ll");//可�?�,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
mOption.setScanSpan(3000);//可�?�,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等�?1000ms才是有效�?
mOption.setIsNeedAddress(true);//可�?�,设置是否�?要地�?信息,默认不�?�?
mOption.setIsNeedLocationDescribe(true);//可�?�,设置是否�?要地�?描述
mOption.setNeedDeviceDirect(false);//可�?�,设置是否�?要设备方向结�?
mOption.setLocationNotify(false);//可�?�,默认false,设置是否当gps有效时按�?1S1次频率输出GPS结果
mOption.setIgnoreKillProcess(true);//可�?�,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀�?
mOption.setIsNeedLocationDescribe(true);//可�?�,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于�?�在北京天安门附近�??
mOption.setIsNeedLocationPoiList(true);//可�?�,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得�?
mOption.SetIgnoreCacheException(false);//可�?�,默认false,设置是否收集CRASH信息,默认收�?
}
return mOption;
}
public void start(){
synchronized (objLock) {
if(client != null && !client.isStarted()){
client.start();
}
}
}
public void stop(){
synchronized (objLock) {
if(client != null && client.isStarted()){
client.stop();
}
}
}
}