由于我是以不定期的间隔编写应用程序,因此我使用的某些API在我回来时会被弃用。
最值得注意的是GPS API的变化。令我感到困惑的是,较旧的API似乎可以提供更好的结果(代码将遵循)
我正在使用MapView,并且还使用旧方法(单独的gps和网络提供程序)以及更新的方法(“FusedLocation”)以编程方式获取GPS坐标。
我比较了谷歌地图中的两个代码坐标,虽然较旧的代码(使用gps和网络提供商分离)是准确和稳定的,但新代码(使用“FusedLocation”)已经消耗了几个数量并且不稳定,尽管匹配mapView指向的位置(意味着它们都不准确且不断变化)。
所以我的问题是,哪种方法正确使用?我想也许我编写错误的FusedLocation,但因为它与MapView匹配,所以我把它排除了。
旧代码,使用GPS&网络分开:
public Location getLocation() {
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(!isGPSEnabled && !isNetworkEnabled) {
} else {
this.canGetLocation = true;
if (isGPSEnabled) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
if(isNetworkEnabled) {
if(location == null) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if(locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
}
}
}
新代码,使用FusedLocation:
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
public boolean canGetLocation() {
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
try {
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception e) {
e.printStackTrace();
return false;
}
//some more code
}
public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
答案 0 :(得分:0)
你应该使用新的API,FusedLocationProviderAPI包括高精度,低电池使用和低内存使用。但是现在不推荐使用android.location。
查看此文档了解详情 - https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi