GPS isProviderEnabled 总是返回 false
Posted
技术标签:
【中文标题】GPS isProviderEnabled 总是返回 false【英文标题】:GPS isProviderEnabled always return false 【发布时间】:2014-03-03 05:30:58 【问题描述】:我有这个代码
lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
boolean isGPS = lm.isProviderEnabled (LocationManager.GPS_PROVIDER);
并且它总是返回 false,即使启用了 GPS。 GPS 工作正常,但我使用此布尔值显示弹出“未启用 GPS”。在这种情况下,每次都会出现弹出窗口
-
我检查了类似的问题,但没有帮助。
是的,我的清单中有权限
我在 onResume 方法中使用了这段代码
感谢您的帮助。
【问题讨论】:
【参考方案1】:如果您正在检查位置是否打开,无论它是否使用 GPS,所以您必须注意以下内容,因为它是我的情况,在设备位置设置中 定位方法 设置为 BatterySaving 模式,在该模式下设备仅使用 WiFi 移动网络来估计位置:
因此,GPS 甚至不用于更新位置,因此位置图标不会出现在状态栏中,除了位置提供者将声明为 Network 而不是 GPS 。
因此,要解决该问题,您必须检查提供程序是否包含 gps
或包含 network
:
private boolean checkIfLocationOpened()
String provider = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (provider.contains("gps") || provider.contains("network"))
return true;
// otherwise return false
return false;
如果你想使用LocationManager
:
private boolean checkIfLocationOpened()
final LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
return true;
// otherwise return false
return false;
【讨论】:
@MuhammedRefaat 但是当 GPS 关闭时,manager.isProviderEnabled(LocationManager.GPS_PROVIDER)
和 manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
仍然返回 false!我已经在 android API 28 上对其进行了测试。
@Dr.jacky 如果位置设置已设置为“高精度”并且 GPS 已关闭,它将偏离轨道返回,您确定这不是您的情况吗?
@MuhammedRefaat 但在提示中,它说:“使用 GPS、Wi-Fi 和移动网络来估计您的位置”。因此,如果 GPS 关闭,它可以从网络获取位置! -> i.stack.imgur.com/fKr3H.png
@Dr.jacky 是的,你是对的,所以它应该使用网络,让我从我这边检查一下,如果我能找到什么东西会告诉你
@Gerrard 我的荣幸【参考方案2】:
试试这个方法..
private void turnGPSOn()
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.contains("gps"))
final Intent poke = new Intent();
poke.setClassName("com.android.settings","com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
【讨论】:
我使用了你的一部分代码。这个'if'返回真值 他们是否有任何理由使用 Settings.Secure 会返回比 LocationManager.isProviderEnabled 更好的结果?我问是因为似乎在某些设备上 isProvderEnabled 无法按预期工作...... 在 GPS 打开的情况下,我的提供者值是网络,而且现在不推荐使用 LOCATION_PROVIDERS_ALLOWED。还有其他解决方案吗?【参考方案3】:有时位置管理器返回错误的结果。下面的代码对我有用。
public static boolean isGpsEnabled(Context context)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
String providers = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (TextUtils.isEmpty(providers))
return false;
return providers.contains(LocationManager.GPS_PROVIDER);
else
final int locationMode;
try
locationMode = Settings.Secure.getInt(context.getContentResolver(),
Settings.Secure.LOCATION_MODE);
catch (Settings.SettingNotFoundException e)
e.printStackTrace();
return false;
switch (locationMode)
case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
case Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
return true;
case Settings.Secure.LOCATION_MODE_BATTERY_SAVING:
case Settings.Secure.LOCATION_MODE_OFF:
default:
return false;
【讨论】:
【参考方案4】:试试这个 GPS 示例代码。希望对您有所帮助。
GPS Location
【讨论】:
【参考方案5】:有时你必须重启你的设备,可能gps-status返回失败。
【讨论】:
【参考方案6】:要修复 GPS isProviderEnabled 在 Android 6 上始终返回 false,请将其添加到您的清单中:
<uses-feature android:name="android.hardware.location.gps" />
Titanium 在 android 5.0 及更高版本上找不到 GPS 硬件,因此它一直返回 false。添加上面的行来解决问题。
【讨论】:
以上是关于GPS isProviderEnabled 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章
Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManage
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 使用 Wi-Fi 总是返回 false
Android google maps v2 isproviderEnabled(LocationManager.NETWORK_PROVIDER,0,0,this) 总是返回 false
.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为真