【问题标题】:onLocationChanged isn't called even though the GPS provider is availble即使 GPS 提供程序可用,也不会调用 onLocationChanged
【发布时间】:2014-10-17 12:35:11
【问题描述】:

我尝试使用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

我怎样才能写一个回退(不超时)来强制调用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());

【问题讨论】:

    标签: java android gps location


    【解决方案1】:
    • 但是当我在室内时,永远不会调用 onLocationChanged。

    对此你无能为力。但是,有些手机可以在室内获取位置,这与手机的GPS接收器有关,所以硬件问题。

    那么如果你知道你在室内,你可以使用LocationManager.NETWORK_PROVIDER来获取位置。但是,它比LocationManager.GPS_PROVIDER 更准确。

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

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

    请注意:“GPS 提供商可用”并不意味着您可以通过它获取位置。不合理,但在android设备上情况就是这样。

    希望对你有所帮助。

    【讨论】:

    • You can not do anything about that 没有 API 可以让我获得最后一个已知位置。这可能是我的后备。但是那个 API 怎么样了?
    • Unreasonable but on android devices the case is like that. 那么您什么时候会提示用户在设备设置中启用 GPS?
    【解决方案2】:

    根据您在代码中的空值检查,我假设永远不会请求网络位置提供程序进行位置更新,否则您会看到异常:

    if (isNetworkEnabled) {
        if (androidLocationManager == null) {
            androidLocationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 0, 0,
                    saveToSharedPrefListener);
            Log.d(MyLogger.TAG, "Network Enabled");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 2013-09-11
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多