我有一个使用网络服务提供者为它的位置的应用程序。 每次在应用程序启动时,它会检查网络服务提供者是否使用isProviderEnabled()方法中的LocationManager启用。 如果返回false我提出一个警告到用户,使网络提供商,然后使用该应用程序。 这种逻辑一直工作得很好,与非谷歌认证的设备只有少数例外(因为不是一个问题,他们通常没有地图API要么)。 最近,对豆形软糖仿真器上ICS一些设备,现在我得到isProviderEnabled一致的“假”(),即使它被启用。
因为我已经搬到利用Settings.Secure.getString(getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED))返回的字符串以查看它是否包含“网络”。 这是一个黑客,但它的工作现在。 我很想能够使用isProviderEnabled()方法。
有没有人看到这个问题之前?
从该API文档:LocationManager.GPS_PROVIDER
此提供利用卫星确定位置。 根据条件,这提供者可能需要一段时间才能返回位置锁定。 需要许可ACCESS_FINE_LOCATION。
所以,如果你不需要它ACCESS_FINE_LOCATION将返回false。
@naqi @gkris我也注意到了这个问题,即isProviderEnabled(LocationManager.GPS_PROVIDER)
是返回false
。
解决的办法是也询问用户所设置的Location Method
,以High Accuracy
,而不是Battery Saving
或Device Only
此设置下的位置设置可用,并且有不同的设备上不同的名称。 在我所测试的一些设备,这个设置是名字Mode
, Location Mode
, Location Method
等也值可以High Accuracy
或GPS
或者GPS, Wifi and Mobile Networks
开发人员必须培训用户这一点。