mLocationClient = new LocationClient(this); //声明LocationClient类
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setAddrType("detail");
option.setCoorType("gcj02");
option.setScanSpan(1000);
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息
mLocationClient.setLocOption(option);
mLocationClient.start();
//if (mLocationClient != null && mLocationClient.isStarted())
mLocationClient.requestLocation();
mLocationClient.registerLocationListener(new BDLocationListener(){
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if (location == null)
return ;
successfullyLocated=true;
longitude=location.getLongitude();
latitude=location.getLatitude();
tv_longitude.setText("当前位置:"+location.getAddrStr());
mLocationClient.stop();
}
@Override
public void onReceivePoi(BDLocation arg0) {
// TODO Auto-generated method stub
}
});
以上是百度地图的方法,不需要跳到设置里打开GPS,定位速度快。百度地图API:http://openapi.baidu.com/map/geosdk-android-classv2.6.htm#LocationClient.E7.B1.BB
private boolean openGPS(){locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);//locationManager.setTestProviderEnabled("gps", true);boolean GPS_status = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //boolean NETWORK_status = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);if(!GPS_status){ Toast.makeText(Search.this, "如需要更精确的定位,请打开GPS卫星定位并保证抬头可见天空", Toast.LENGTH_SHORT).show(); //转到手机设置界面,用户设置GPS Intent intent=new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent,0); //设置完成后返回到原来的界面 return false;} return true;}private boolean getLocation(){ boolean GPS_status = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);//获得手机是不是设置了GPS开启状态true:gps开启,false:GPS未开启 boolean NETWORK_status = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//另一种Gpsprovider(Google网路地图)Criteria criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(true);criteria.setPowerRequirement(Criteria.POWER_LOW);String provider = locationManager.getBestProvider(criteria, true);//String provider = "gps";if(provider==null){tv_longitude.setText("无法获取当前位置,请将搜索半径设为无限制!");return false;}Location location = locationManager.getLastKnownLocation(provider);if(location==null){tv_longitude.setText("正在定位中,请稍后...");}loclistener=new LocationListener(){@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stublongitude=location.getLongitude();latitude=location.getLatitude();successfullyLocated=true;mButton.setClickable(true);mSpinner.setSelection(radiuslist.size()-1);Geocoder geocoder = new Geocoder(getBaseContext(), Locale.CHINESE);try {List<Address> address=geocoder.getFromLocation(latitude, longitude, 1);tv_longitude.setText(address.get(0).toString());} catch (IOException e) {// TODO Auto-generated catch blocktv_longitude.setText("定位成功,请选择查找半径");e.printStackTrace();}locationManager.removeUpdates(loclistener); }@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onStatusChanged(String provider, int status,Bundle extras) {// TODO Auto-generated method stub}}; locationManager.requestLocationUpdates(provider, 1000, 1, loclistener);return true;}
本文介绍如何利用百度地图API实现快速精准定位,包括设置定位选项、打开GPS、获取位置信息及展示地理位置详情,无需手动跳转设置界面,简化定位流程。

被折叠的 条评论
为什么被折叠?



