检查是否启用了“访问我的位置” - Android

时间:2013-08-09 15:43:28

标签: android gps location

我有一个使用位置的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));
}

5 个答案:

答案 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)

可能会有用 查看此网站,它讨论了位置服务

http://www.scotthelme.co.uk/android-location-services/

答案 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;
    }
}