java - 即使 GPS 提供商可用,也不会调用 onLocationChanged

标签 java android gps location

我尝试使用 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 精度更高。

  • 这两者在室内工作方面有什么区别?

    1. 如果您的 GPS 接收器无法获取位置更新(有时 室内,有时是恶劣天气,也与您的手机有关 硬件),使用哪个模块并不重要。
    2. 如果您的 GPS 接收器可以获取位置更新,则使用第一个接收器不断更新您的位置。

请注意:“GPS 提供程序可用”并不意味着您可以使用它获取位置。不合理,但在 Android 设备上就是这样。

希望对您有所帮助。

关于java - 即使 GPS 提供商可用,也不会调用 onLocationChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425156/

相关文章:

java - 如何保护 Spring MVC REST 服务 json 响应

android - Color.parseColor 返回负值

angularjs - Cordova Angularjs 请求 GPS

android - 当 Android API 级别低于 24 时,如何获取卫星的星座类型?

geolocation - 如何验证纬度和经度

java - 从带有 JAVA 查询参数的链接下载图像

java - 亚马逊电子病历 : Passing java system property to custom jar

java - Spring 4 MVC 区域设置已更改,但 JSP 对此没有响应

java - Android 从 app.Fragment 导航到 PreferenceFragment

应用程序恢复/重启时的 Android 手动暗模式导致应用程序主题无法正常工作