18

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

5 回答 5

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);
于 2013-08-09T15:49:43.143 回答
3

可能这将是有用的检查这个网站它讨论了位置服务

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

于 2013-08-09T15:48:32.210 回答
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
} 
于 2016-04-01T14:42:36.010 回答
0

Settings.Secure.LOCATION_PROVIDERS_ALLOWED不幸的是,自 API 19 以来似乎不推荐使用 of 。

一种新的方法是:

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
}
于 2016-04-01T14:39:27.340 回答
-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;
    }
}
于 2017-05-17T04:33:57.173 回答