Android LocationManager.isProviderEnabled()始终返回false

时间:2012-07-11 16:38:52

标签: android locationmanager

我有一个应用程序,它使用网络提供程序来获取它的位置。每次应用程序启动时,它都会检查是否使用LocationManager中的isProviderEnabled()方法启用了网络提供程序。如果返回false,则向用户发出警报以启用网络提供程序,然后使用该应用程序。这个逻辑一直运行得非常好,除了一些非例外的非Google认证设备(因为它们通常也没有Maps API)。最近,对于ICS上的一些设备,现在在JellyBean仿真器上,即使启用了isProviderEnabled(),我也会得到一致的“假”。

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

以前有人看过这个问题吗?

2 个答案:

答案 0 :(得分:0)

来自API文档:LocationManager.GPS_PROVIDER

  

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

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

答案 1 :(得分:0)

@naqi @gkris 我还注意到memset正在返回isProviderEnabled(LocationManager.GPS_PROVIDER)的问题 解决方法是要求用户将false设置为Location Method而不是High AccuracyBattery Saving

此设置在位置设置下可用,并且在不同设备上具有不同的名称。在我测试过的某些设备上,此设置名称为Device OnlyModeLocation Mode等。此值可以是Location MethodHigh Accuracy或{ {1}}

开发人员必须对此进行培训。