根据指定的内容[4-5块的差异],您可能会获得location
from networkProvider
only.
有了这个gpsTracker
问题中提到的代码,
需要进行一些修改,而不是按原样使用代码:
1.有2个if
验证来源的循环location
是否启用且否 'else
':
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
这意味着当您可以获得该应用程序时,该应用程序将完成两倍的工作location
来自两个来源。此外,来源location
获得的总是含糊不清的。
当您只需要近似值时,这很好location
主要不应该为空。
如果你只想使用这个类来获取location
,尝试构建if-else
根据要求并确保不会重复location
获得。
Eg. if GPS
具有更高的偏好,适用于您的情况,请改变if
上面并把网络状况加上else
like:
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
} else if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
根据您的要求,我建议删除网络提供商部分并获取location
仅来自 GPS,尤其是在视线不成问题的情况下。
当您的代码工作正常时,它必须从 GPS 获取位置并将其设置在对象中。但因为这两个“if
“ 和不 ”else
“,你永远不会知道是否location
获得的是从网络或GPS - 你可以检查位置.getProvider() http://developer.android.com/reference/android/location/Location.html#getProvider()的条件内canGetLocation()
2.此外,您还可以记录消息或提示针对某个特定来源的某些操作...例如:
在这一部分中:
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
}
只需将其分成两个不同的if
(s) 和相应的代码。截至目前,这里什么也没有发生,所以除非您从外部检查,否则您不知道两者是否都被禁用。
建议:尝试一下使用 GooglePlayServices 的 LocationClient http://developer.android.com/reference/com/google/android/gms/location/LocationClient.html for 检索当前位置 http://developer.android.com/training/location/retrieve-current.html。我发现它更可靠、更有用。检查这个融合位置提供商示例 http://www.kpbird.com/2013/06/fused-location-provider-example.html, 环境位置请求对象 http://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html根据你的要求是关键。
另一个更新:刚刚发现:关于堆栈溢出的有用问题 - 获取用户位置的好方法 https://stackoverflow.com/questions/6181704/good-way-of-getting-the-users-location-in-android?rq=1
为查找此问题/答案的任何人提供更新
关于LocationClient的建议;
下不再找到 LocationClientcom.google.android.gms.location https://developer.android.com/reference/com/google/android/gms/location/package-summary.html, 参考:
Android play services 6.5:LocationClient 丢失 https://stackoverflow.com/questions/27372638/android-play-services-6-5-locationclient-is-missing