我有一个使用位置的Android应用程序。但我注意到,如果用户在“设置”中禁用“访问我的位置”,位置访问,没有任何作品。如何检查它是否已启用? 如果它被禁用,如何从我的应用程序中打开这些设置?
由于
已解决:
String locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (locationProviders == null || locationProviders.equals("")) {
...
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
答案 0 :(得分:8)
您可以这样检查:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean
编辑:
如果您想查看网络提供商:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean
编辑2:
如果要打开设置,可以使用此意图:
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
答案 1 :(得分:3)
可能会有用 查看此网站,它讨论了位置服务
答案 2 :(得分:2)
在不使用Settings.Secure
且不扫描所有位置提供商的情况下执行此操作的另一种方法是:
LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only
if (providersCount == 0) {
// No location providers at all, location is off
}
答案 3 :(得分:0)
不幸的是,从API 19开始,似乎不推荐使用Settings.Secure.LOCATION_PROVIDERS_ALLOWED
。
这样做的新方法是:
int locationMode = Settings.Secure.getInt(
getContentResolver(),
Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCATION_MODE_OFF // Default value if not found
);
if (locationMode == Settings.Secure.LOCATION_MODE_OFF) {
// Location is off
}
答案 4 :(得分:-1)
检查位置有两种方法, 1 - 使用GPS 2使用网络提供商 最好检查两个服务是否启用。为此使用此方法:)
public boolean checkServices(){
//check location service
LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
return true;
}
}