我有一个应用程序,它使用网络提供程序来获取它的位置。每次应用程序启动时,它都会检查是否使用LocationManager中的isProviderEnabled()方法启用了网络提供程序。如果返回false,则向用户发出警报以启用网络提供程序,然后使用该应用程序。这个逻辑一直运行得非常好,除了一些非例外的非Google认证设备(因为它们通常也没有Maps API)。最近,对于ICS上的一些设备,现在在JellyBean仿真器上,即使启用了isProviderEnabled(),我也会得到一致的“假”。
我已经开始使用从中返回的字符串了 Settings.Secure.getString(getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED))查看它是否包含“网络”。这是一个黑客,但它现在正在工作。我希望能够使用isProviderEnabled()方法。
以前有人看过这个问题吗?
答案 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 Accuracy
或Battery Saving
此设置在位置设置下可用,并且在不同设备上具有不同的名称。在我测试过的某些设备上,此设置名称为Device Only
,Mode
,Location Mode
等。此值可以是Location Method
或High Accuracy
或{ {1}}
开发人员必须对此进行培训。