4

我们已经为 Android 实现了基于地理的应用程序,因此我们需要确保始终启用 GPS。问题是

manager.isProviderEnabled( LocationManager.GPS_PROVIDER )

即使启用了 GPS 提供程序,它也总是返回 false,因此我们的应用程序总是显示更改 GPS 状态的警报,或者它不工作。

你知道发生了什么吗?

我们正在使用三星 Galaxy S 和 HTC Wildfire 设备对其进行测试……提前致谢。

4

3 回答 3

5

您可以直接从系统获取 GPS 状态:

LocationManager myLocationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);

private boolean getGPSStatus()
{
   String allowedLocationProviders =
   Settings.System.getString(getContentResolver(),
   Settings.System.LOCATION_PROVIDERS_ALLOWED);

   if (allowedLocationProviders == null) {
      allowedLocationProviders = "";
   }

   return allowedLocationProviders.contains(LocationManager.GPS_PROVIDER);
} 
于 2012-07-05T10:19:29.990 回答
0

您需要首先检查您的手机上是否真的存在 GPS。如果您的手机是便宜的手机,很可能它使用网络位置作为位置提供者。

你可以试试这个:

private boolean isGPSEnabled() {
Context context = Session.getInstance().getCurrentPresenter().getViewContext();

LocationManager locationMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

boolean GPS_Sts = locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)|| locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);

return GPS_Sts;
}
于 2016-06-10T17:27:01.417 回答
0

有时您的设备设置被设置为使用 WiFi 网络而不是 GPS 系统获取位置,以便打开该位置,但您的应用程序在检查GPS_PROVIDER.

正确的解决方案是同时检查 GPS 和网络:

如果你想检查使用Settings

private boolean checkIfLocationOpened() {
    String provider = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (provider.contains("gps") || provider.contains("network"))
        return true;
    }
    // otherwise return false
    return false;
}

如果你想使用LocationManager

private boolean checkIfLocationOpened() {
    final LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        return true;
    }
    // otherwise return false
    return false;
}

您可以在我的回答中找到完整的详细信息。

于 2017-11-13T06:14:04.627 回答