1 若用户设置GPS优先,则优先使用GPS进行定位,如果GPS定位未打开或者没有可用位置信息,且网络连接正常,定位SDK则会返回网络定位(即Wi-Fi与基站)的最优结果。为了使获得的网络定位结果更加精确,请打开手机的Wi-Fi开关。
/**
* 如果gps关闭则打开手机gps设置,如果gps已打开则
关闭gps设置
*/
public void opengps(){
Intent gpsIntent = new Intent();
gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
gpsIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(HomeActivity.this, 0, gpsIntent, 0).send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
判断是否打开gps代码
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (!locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))
{
opengps();
}
红色框子中就是软件启动后打开gps的标志
2 如果使用百度定位sdk一定要在中AndroidManifest.xml增加服务(因为这个问题调试了半天都获取不到坐标,也不报错!郁闷啊!!!)
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
3 初始化百度地图定位SDK,获取gps坐标
// 定位类
private LocationClient mLocationClient = null;
private MyReceiveListenner mListenner = null;
private LocationData locData = null;
/**
* 初始化百度地图定位SDK获取gps坐标
*/
public void startBaiDuGpsLocation() {
mLocationClient = new LocationClient( this );
mListenner = new MyReceiveListenner();
mLocationClient.registerLocationListener(mListenner);//注册监听
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);//打开gps
option.setCoorType("bd09ll"); //设置坐标类型
option.setScanSpan(10000); //10秒获取一次坐标
mLocationClient.setLocOption(option);
mLocationClient.start();
}
// 监听定位得到gps坐标,然后定位
public class MyReceiveListenner implements BDLocationListener {
double _latitud=0;
double _longitude=0;
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null){
//showMsg("百度获取坐标失败!");
return;
}
double latitude = location.getLatitude();
double longitude = location.getLongitude();
if(_latitud!=latitude&&_longitude!=longitude){
GeoPoint point = new GeoPoint((int) (latitude * 1E6),(int) (longitude * 1E6));
showMsg("mlatitude:"+point.getLatitudeE6()+"mlongitude:"+point.getLongitudeE6());
}
_latitud=latitude;
_longitude=longitude;
}
@Override
public void onReceivePoi(BDLocation poiLocation) {
if (poiLocation == null){
return ;
}
}
}
项目引用