Android LocationManager.isProviderEnabled()始终返回false

Android LocationManager.isProviderEnabled()始终返回false,android,locationmanager,Android,Locationmanager,我有一个应用程序,它的位置使用网络提供商。每次启动应用程序时,它都会使用LocationManager中的isProviderEnabled()方法检查网络提供商是否已启用 如果返回false,我将向用户发出警报,以启用网络提供商,然后使用该应用程序。这种逻辑一直运行得很好,只有少数非谷歌认证的设备例外(这并不令人担心,因为它们通常也没有地图API)。最近,对于ICS上的一些设备和现在的JellyBean emulator,我得到了isProviderEnabled()的一致“false”,即使

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

如果返回false,我将向用户发出警报,以启用网络提供商,然后使用该应用程序。这种逻辑一直运行得很好,只有少数非谷歌认证的设备例外(这并不令人担心,因为它们通常也没有地图API)。最近,对于ICS上的一些设备和现在的JellyBean emulator,我得到了
isProviderEnabled()
的一致“false”,即使它已启用

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


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

来自:LocationManager.GPS\u提供商的API文档

此提供程序使用卫星确定位置。取决于 条件下,此提供程序可能需要一段时间才能返回位置修复。 需要访问\u FINE\u位置的权限

因此,如果您不需要访问FINE位置,它将返回false。

@naqi@gkris 我还注意到,
isProviderEnabled(LocationManager.GPS\u PROVIDER)
返回
false

的问题 解决方法是要求用户将
定位方法设置为
高精度
,而不是
节省电池
仅限设备

此设置在“位置设置”下可用,并且在不同的设备上具有不同的名称。在我测试过的一些设备上,此设置具有名称
模式
位置模式
位置方法
等,并且值可以是
高精度
GPS
GPS、Wifi和移动网络


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

我也面临着这个问题!你有什么工作要做吗?