Android 为GPS提供的ISP不工作

Android 为GPS提供的ISP不工作,android,gps,Android,Gps,我们已经为Android实现了一个基于地理的应用程序,所以我们需要确保GPS一直处于启用状态。问题是 manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) 即使GPS提供商已启用,也始终返回false,因此我们的应用程序始终显示更改GPS状态的警报或它不工作 你知道发生了什么事吗 我们正在用三星Galaxy S和HTC Wildfire设备进行测试。。。 提前感谢。您可以直接从系统获取GPS状态: LocationManager m

我们已经为Android实现了一个基于地理的应用程序,所以我们需要确保GPS一直处于启用状态。问题是

manager.isProviderEnabled( LocationManager.GPS_PROVIDER )
即使GPS提供商已启用,也始终返回false,因此我们的应用程序始终显示更改GPS状态的警报或它不工作

你知道发生了什么事吗

我们正在用三星Galaxy S和HTC Wildfire设备进行测试。。。
提前感谢。

您可以直接从系统获取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);
} 

你需要首先检查你的手机上是否有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;
}

有时,您的设备设置被设置为使用WiFi网络而不是GPS系统获取位置,因此该位置将被打开,但在检查
GPS\u提供商时,您的应用程序将返回false

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

如果要使用
设置进行检查

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;
}

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

位置\u允许的提供程序自API 19以来已被弃用。Doc说要使用
LOCATION\u MODE
MODE\u CHANGED\u ACTION
(或
PROVIDERS\u CHANGED\u ACTION
)你的解决方案每次都返回false,出了什么问题?@Zhar我不能告诉你哪里出了问题,位置怎么了,它打开了吗?在设置中,它显示它用什么来获取位置?也请参考这个答案了解更多细节:我可以建议你阅读我的帖子吗?谷歌手机并不便宜。。。我已经阅读了你的答案,但我希望我的应用程序能够工作,并且不依赖于位置方法,那么如何实现这一点呢?