我们已经为Android实现了一个基于地理位置的应用程序,因此我们需要确保GPS始终处于启用状态。问题是
manager.isProviderEnabled( LocationManager.GPS_PROVIDER )
总是返回false,即使启用了GPS提供程序,所以我们的应用程序总是显示更改GPS状态的警报,或者它不工作。
你知道发生了什么吗?
我们正在使用三星Galaxy S和HTC Wildfire设备对其进行测试。提前谢谢。
发布于 2012-07-05 18:19:30
您可以直接从系统获取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);
}
发布于 2016-06-11 01:27:01
你需要首先检查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;
}
发布于 2017-11-13 14:14:05
有时,您的设备设置为使用WiFi网络而不是全球定位系统获取位置,这样位置将被打开,但当检查GPS_PROVIDER
时,您的应用程序将返回false。
正确的解决方案是同时检查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;
}
你可以在my answer here上找到完整的细节。
https://stackoverflow.com/questions/11341771
复制相似问题