我尝试使用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());
答案 0 :(得分:2)
你无能为力。但是,有些手机可以在室内获得该位置,它与手机的 GPS接收器有关,因此存在硬件问题。
然后,如果您了解自己在室内,则可以使用LocationManager.NETWORK_PROVIDER
获取位置。但是,它的工作精度高于LocationManager.GPS_PROVIDER
。
这两者在室内工作方面有什么区别?
请注意:" GPS提供商可用"并不意味着你可以获得它的位置。不合理但在Android设备上的情况就是这样。
我希望有所帮助。
答案 1 :(得分:1)
我认为根据代码中的空值检查,永远不会要求网络位置提供程序进行位置更新,否则您会看到异常:
if (isNetworkEnabled) {
if (androidLocationManager == null) {
androidLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0,
saveToSharedPrefListener);
Log.d(MyLogger.TAG, "Network Enabled");
}
}