private double latitude = 0.0;
private double longitude = 0.0;
<span style="white-space:pre"> </span>//利用手机位置服务定位
void getLoaction() {
final LocationManager locationManager = (LocationManager) getActivity()
.getSystemService(Context.LOCATION_SERVICE);
//创建一个criteria对象
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
//设置不需要获取海拔方向数据
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
//设置允许产生资费
criteria.setCostAllowed(true);
//要求低耗电
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, false);
Log.i(TAG, "we choose "+ provider);
Location location = locationManager.getLastKnownLocation(provider);
//第一次获得设备的位置
updateLocation(location);
//重要函数,监听数据测试
locationManager.requestLocationUpdates(provider, 6000, 10,
locationListener);
}
//创建一个事件监听器
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateLocation(location);
}
public void onProviderDisabled(String provider) {
updateLocation(null);
Log.i(TAG, "Provider now is disabled..");
}
public void onProviderEnabled(String provider) {
Log.i(TAG, "Provider now is enabled..");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
//获取用户位置的函数,利用Log显示
private void updateLocation(Location location) {
Log.i(TAG, "updateLocation");
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
String oldLocation = MainUIActivity.mApplication.getLocation();
String newLocation = longitude + "," + latitude;
mCurCommunityPoint.setText(newLocation);
newLocation = Utils.bd_encrypt(latitude, longitude);
Log.i(TAG, "The location has changed.. " + newLocation);
if (!newLocation.equals(oldLocation)) {
mCurPageIndex = 1;
mHandler.obtainMessage(GET_COMMUNITY_DATA,
newLocation).sendToTarget();
}
}
}
//百度位置服务,百度定位sdk下载地址:http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
void getBaiduLoaction(){
LocationClient mLocationClient = new LocationClient(getActivity());
mLocationClient.registerLocationListener( new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
onLocationChanged(location);
}
} );
//注册监听函数
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
option.setCoorType("gcj02");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true);//返回的定位结果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
mLocationClient.setLocOption(option);
mLocationClient.start();
}
/**
* 当位置发生变化时触发此方法
*
* @param location 当前位置
*/
public void onLocationChanged(BDLocation location) {
if (location != null) {
// 显示定位结果
Log.d(TAG, location.getLongitude() + " " + location.getLatitude());
latitude = location.getLatitude();
longitude = location.getLongitude();
String oldLocation = MainUIActivity.mApplication.getLocation();
String newLocation = longitude + "," + latitude;
mCurCommunityPoint.setText(newLocation);
newLocation = Utils.bd_encrypt(latitude, longitude);
Log.i(TAG, "The location has changed.. " + newLocation);
if (!newLocation.equals(oldLocation)) {
mCurPageIndex = 1;
mHandler.obtainMessage(GET_COMMUNITY_DATA,
newLocation).sendToTarget();
}
}
}
从准确度来说百度还是比较靠谱的。