我们已经为 Android 实现了基于地理的应用程序,因此我们需要确保始终启用 GPS。问题是
manager.isProviderEnabled( LocationManager.GPS_PROVIDER )
即使启用了 GPS 提供程序,它也总是返回 false,因此我们的应用程序总是显示更改 GPS 状态的警报,或者它不工作。
你知道发生了什么吗?
我们正在使用三星 Galaxy S 和 HTC Wildfire 设备对其进行测试……提前致谢。
您可以直接从系统获取 GPS 状态:
LocationManager myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
private boolean getGPSStatus()
{
String allowedLocationProviders =
Settings.System.getString(getContentResolver(),
Settings.System.LOCATION_PROVIDERS_ALLOWED);
if (allowedLocationProviders == null) {
allowedLocationProviders = "";
}
return allowedLocationProviders.contains(LocationManager.GPS_PROVIDER);
}
您需要首先检查您的手机上是否真的存在 GPS。如果您的手机是便宜的手机,很可能它使用网络位置作为位置提供者。
你可以试试这个:
private boolean isGPSEnabled() {
Context context = Session.getInstance().getCurrentPresenter().getViewContext();
LocationManager locationMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean GPS_Sts = locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)|| locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
return GPS_Sts;
}
有时您的设备设置被设置为使用 WiFi 网络而不是 GPS 系统获取位置,以便打开该位置,但您的应用程序在检查GPS_PROVIDER
.
正确的解决方案是同时检查 GPS 和网络:
如果你想检查使用Settings
:
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;
}
您可以在我的回答中找到完整的详细信息。