Android LocationManager.isProviderEnabled()总是返回false

我有一个应用程序使用networking提供商的位置。 每次启动应用程序时,都会检查LocationManager中是否使用isProviderEnabled()方法启用networking提供程序。 如果返回false,我向用户提供一个警报,以启用networking提供程序,然后使用该应用程序。 这个逻辑运行得非常好,除了less数例外,非Googleauthentication的设备(不担心,因为他们通常没有Maps API)。 最近,在ICS上的一些设备上,现在在JellyBean模拟器上,即使启用了isProviderEnabled(),我也会得到一致的“false”。

我已经转向使用从Settings.Secure.getString(getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED))返回的string来查看它是否包含“networking”。 这是一个黑客,但它现在正在工作。 我很想能够使用isProviderEnabled()方法。

有没有人看到过这个问题?

Solutions Collecting From Web of "Android LocationManager.isProviderEnabled()总是返回false"

来自API文档:LocationManager.GPS_PROVIDER

该提供商使用卫星确定位置。 根据条件,此提供程序可能需要一段时间才能返回位置修复程序。 需要权限ACCESS_FINE_LOCATION。

所以如果你不需要ACCESS_FINE_LOCATION,它将返回false。

@naqi @gkris我也注意到这个问题isProviderEnabled(LocationManager.GPS_PROVIDER)返回false
解决scheme是要求用户将“ Location Method设置为“ High Accuracy而不是“ Battery Saving或“ Device Only

此设置在位置设置下可用,并在不同设备上具有不同的名称。 在我testing过的一些设备上,这个设置是名称ModeLocation ModeLocation Method等也可以是High AccuracyGPSGPS, Wifi and Mobile Networks

开发人员将不得不在这方面培训用户。