我尝试使用 MyCustomLocationListener
获取设备当前位置。
我的代码在这里传递并指示 GPS 和网络提供商都可用。
// getting GPS status
isGPSEnabled = androidLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = androidLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
Log.e(MyLogger.TAG, "Non providers are enabled");
showEnableGpsDialog();
return;
}
if (isGPSEnabled) {
androidLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0,
saveToSharedPrefListener);
Log.d(MyLogger.TAG, "GPS Enabled");
}
if (isNetworkEnabled) {
if (androidLocationManager == null) {
androidLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0,
saveToSharedPrefListener);
Log.d(MyLogger.TAG, "Network Enabled");
}
}
但是当我在室内时,onLocationChanged
永远不会被调用。
只有当我使用Fake GPS
应用程序时,才会调用onLocationChanged
。
我如何编写回退(带\out 超时)以强制调用 onLocationChanged
我曾经使用另一个 API requestSingleUpdate
:
这两者在室内工作方面有什么区别?
if (isGPSEnabled) {
androidLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0,
saveToSharedPrefListener);
Log.d(MyLogger.TAG, "GPS Enabled");
}
和
if (BaseApplication.getCurrentActivity() != null) {
locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER,
saveToSharedPrefListener, BaseApplication.getCurrentActivity()
.getMainLooper());
最佳答案
- 但是当我在室内时永远不会调用 onLocationChanged。
你对此无能为力。但是,有些手机可以在室内获取位置,这与手机的GPS接收器有关,所以是硬件问题。
然后,如果您知道自己在室内,则可以使用 LocationManager.NETWORK_PROVIDER
获取位置。但是,它比 LocationManager.GPS_PROVIDER
精度更高。
这两者在室内工作方面有什么区别?
- 如果您的 GPS 接收器无法获取位置更新(有时 室内,有时是恶劣天气,也与您的手机有关 硬件),使用哪个模块并不重要。
- 如果您的 GPS 接收器可以获取位置更新,则使用第一个接收器不断更新您的位置。
请注意:“GPS 提供程序可用”并不意味着您可以使用它获取位置。不合理,但在 Android 设备上就是这样。
希望对您有所帮助。
关于java - 即使 GPS 提供商可用,也不会调用 onLocationChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425156/