我可以使用isProviderEnabled()检查GPS是否打开。如果它没有打开,我正在启动意图,以便用户可以启用GPS。 最后,我再次检查用户是否启用了GPS。 如果用户没有启用GPS并且出来,仍然isProviderEnabled()返回NULL。 可能是什么问题 ?请指导我。
String provider = LocationManager.GPS_PROVIDER;
// Check if GPS is enabled
boolean enabled = myLocationManager.isProviderEnabled(provider);
if (!enabled) {
// GPS not enabled
Log.d("", "Provider " + provider + " is not enabled");
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
// Consider the case when user does not enable GPS and come out.
} else {
Log.d("", "Provider is enabled");
}
// Re-check if user has enabled or not. (Note: case: user has not enabled GPS)
enabled = myLocationManager.isProviderEnabled(provider);
if(!enabled)
{
Log.d("","provider not enabled");
}
else
{
// Control is coming here though user has not enabled GPS in settings
Log.d("","GPS is enabled");
}
谢谢, Biplab
答案 0 :(得分:8)
使用此代码检查GPS启用,让我知道发生了什么,
private void CheckEnableGPS(){
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.equals("")){
//GPS Enabled
Toast.makeText(AndroidEnableGPS.this, "GPS Enabled: " + provider,
Toast.LENGTH_LONG).show();
}else{
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivity(intent);
}
}
答案 1 :(得分:6)
我在实际的物理设备上遇到过这个问题。
我在我的物理Android设备上使用模拟位置进行了一些测试,然后使用GPS切换回真实位置(代码清除了所有模拟位置)。 在这一点上,无论GPS是否停止,应用程序将始终返回" true" (GPS激活)由于某种原因不再注册真实位置。
在这种情况下,重新启动物理设备解决了这个问题。
答案 2 :(得分:0)
在isProviderEnabled()
在设备上返回true的同一问题<棒棒糖
根据user370305的回答我更新了我的方法如下:
private boolean isLocationEnabled() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
return !provider.equals("");
} else {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return gps || network;
}
}