安卓LocationManager.isProviderEnabled()始终返回false(And

2019-06-26 05:26发布

我有一个使用网络服务提供者为它的位置的应用程序。 每次在应用程序启动时,它会检查网络服务提供者是否使用isProviderEnabled()方法中的LocationManager启用。 如果返回false我提出一个警告到用户,使网络提供商,然后使用该应用程序。 这种逻辑一直工作得很好,与非谷歌认证的设备只有少数例外(因为不是一个问题,他们通常没有地图API要么)。 最近,对豆形软糖仿真器上ICS一些设备,现在我得到isProviderEnabled一致的“假”(),即使它被启用。

因为我已经搬到利用Settings.Secure.getString(getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED))返回的字符串以查看它是否包含“网络”。 这是一个黑客,但它的工作现在。 我很想能够使用isProviderEnabled()方法。

有没有人看到这个问题之前?

Answer 1:

从该API文档:LocationManager.GPS_PROVIDER

此提供利用卫星确定位置。 根据条件,这提供者可能需要一段时间才能返回位置锁定。 需要许可ACCESS_FINE_LOCATION。

所以,如果你不需要它ACCESS_FINE_LOCATION将返回false。



Answer 2:

@naqi @gkris我也注意到了这个问题,即isProviderEnabled(LocationManager.GPS_PROVIDER)是返回false
解决的办法是也询问用户所设置的Location Method ,以High Accuracy ,而不是Battery SavingDevice Only

此设置下的位置设置可用,并且有不同的设备上不同的名称。 在我所测试的一些设备,这个设置是名字ModeLocation ModeLocation Method等也值可以High AccuracyGPS或者GPS, Wifi and Mobile Networks

开发人员必须培训用户这一点。



文章来源: Android LocationManager.isProviderEnabled() always returns false