11

我有一个使用网络提供商作为其位置的应用程序。每次应用程序启动时,它都会使用isProviderEnabled()LocationManager 中的方法检查网络提供程序是否已启用。

如果它返回 false,我会向用户发出警报以启用 Network Provider,然后使用该应用程序。这个逻辑运行得非常好,除了非谷歌认证的设备有一些例外(不用担心,因为它们通常也没有 Maps API)。最近,一些设备在 ICS 上,现在在 JellyBean 模拟器上,isProviderEnabled()即使它已启用,我也会得到一致的“错误”。

我已经开始使用从 Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED)) 返回的字符串来查看它是否包含“网络”。这是一个黑客,但它现在正在工作。我希望能够使用isProviderEnabled()方法。

有没有人见过这个问题?

4

2 回答 2

1

@naqi @gkris 我也注意到这个问题isProviderEnabled(LocationManager.GPS_PROVIDER)正在返回false
对此的解决方案是还要求用户设置Location MethodtoHigh Accuracy而不是Battery SavingorDevice Only

此设置在位置设置下可用,并且在不同设备上具有不同的名称。在我测试过的某些设备上,此设置为 name Mode,等Location ModeLocation Method该值也可以是High AccuracyorGPSGPS, Wifi and Mobile Networks

开发人员必须在这方面对用户进行培训。

于 2017-07-13T05:58:37.690 回答
0

来自 API 文档:LocationManager.GPS_PROVIDER

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

因此,如果您不需要 ACCESS_FINE_LOCATION 它将返回 false。

于 2016-02-08T20:25:25.800 回答