android - 在 Kitkat (4.4) 中检查 gps 是否开启

标签 android android-4.4-kitkat

在 kitkat 下方,我知道 gps 是否在提供者列表中打开

String providers = Secure.getString(context.getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);
if (TextUtils.isEmpty(providers)) {
    return false;
}
return providers.contains(LocationManager.GPS_PROVIDER);

但在 kitkat 中,Secure.LOCATION_PROVIDERS_ALLOWED 已被弃用。

Javaodc 说“使用 Secure.LOCATION_MODE”,位置模式如下...

Secure.LOCATION_MODE_OFF
Secure.LOCATION_MODE_SENSORS_ONLY
Secure.LOCATION_MODE_BATTERY_SAVING
Secure.LOCATION_MODE_HIGH_ACCURACY

但我不知道下面的代码是否正确。 (我没有 kitkat 设备)

int locationMode = Secure.getInt(context.getContentResolver(), Secure.LOCATION_MODE);
boolean isGpsOn = locationMode != Secure.LOCATION_MODE_OFF;

如果不正确,请回答正确的代码。

编辑

我知道 LocationManager。但它需要 ACCESS_FINE_LOCATION 权限。 我不需要“访问”位置。

LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
boolean isGpsOn = manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) 

最佳答案

自答

@TargetApi(Build.VERSION_CODES.KITKAT)
@SuppressWarnings("deprecation")
public static boolean isGpsEnabled(Context context) {

    if (PackageUtil.checkPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) {
        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        String providers = Secure.getString(context.getContentResolver(),
                Secure.LOCATION_PROVIDERS_ALLOWED);
        if (TextUtils.isEmpty(providers)) {
            return false;
        }
        return providers.contains(LocationManager.GPS_PROVIDER);
    } else {
        final int locationMode;
        try {
            locationMode = Secure.getInt(context.getContentResolver(),
                    Secure.LOCATION_MODE);
        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        switch (locationMode) {

        case Secure.LOCATION_MODE_HIGH_ACCURACY:
        case Secure.LOCATION_MODE_SENSORS_ONLY:
            return true;
        case Secure.LOCATION_MODE_BATTERY_SAVING:
        case Secure.LOCATION_MODE_OFF:
        default:
            return false;
        }
    }
}

并在您的 packageutils 类中添加此方法:

public static class PackageUtil {

    static boolean checkPermission(Context context, String accessFineLocation) {

        int res = context.checkCallingOrSelfPermission(accessFineLocation);
        return (res == PackageManager.PERMISSION_GRANTED);

    }

}

关于android - 在 Kitkat (4.4) 中检查 gps 是否开启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876191/

相关文章:

android - 在 Kitkat 的 WebView 中播放 youtube 视频

ssl - 在安卓 Lollipop 上进行RSA解密

javascript - WebView 上传照片不起作用 - AndroidX

android - 如何将 viewModel 范围限定为与 NavHost 无关的对话框可组合函数

javascript - Android 浏览器 orientationchange 事件不断触发

android - 如何在 Android 中为 ExoPlayer 设计自定义搜索栏和音量控制

android - 在 Android 4.4 WebView 组件上关闭 Tap-Highlight-Color

java.lang.ClassNotFoundException引起的Android RuntimeException

android - Android 4.4 上的 Firebase 托管 SSL 握手异常

android - 从对话框传递字符串时出现问题