首页 > 解决方案 > 允许来自清单的 Android 11 的 WRITE_SETTINGS 权限

问题描述

我有一个用于“锁定的 Android 手机”的应用程序,这意味着该应用程序是用户可以在该手机上访问的唯一应用程序,并且使用 MySync 完成。

在应用程序必须支持 Android 11(complieSdkVersion 30)之前,用户能够从应用程序更改屏幕亮度和其他系统设置(因为用户无权访问设置应用程序)。但是现在WRITE_SETTINGSandCHANGE_CONFIGURATION已被弃用,不再具有理想的效果。

我知道可以通过以下提示提示用户接受设置:

    boolean permission;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        permission = Settings.System.canWrite(context);
    } else {
        permission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED;
    }
    if (permission) {
        initApp();
    }  else {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + context.getPackageName()));
            startActivityForResult(intent, SettingsActivity.CODE_WRITE_SETTINGS_PERMISSION);
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_SETTINGS}, SettingsActivity.CODE_WRITE_SETTINGS_PERMISSION);
        }
    }

但由于用户无权访问我的应用生态系统中的设置应用程序,因此我无法向用户提供打开设置并允许用户留在设置中的提示。

有没有办法绕过这个权限请求,有没有办法在清单级别或其他方式上做到这一点?

标签: androidandroid-manifestandroid-permissionsandroid-11

解决方案


AndroidManifest 文件:

 <uses-permission
            android:name="android.permission.WRITE_EXTERNAL_STORAGE"
            android:maxSdkVersion="28" />

删除这一行: android:requestLegacyExternalStorage="true"AndroidManifest file.

我希望,这将为您提供预期的解决方案。


推荐阅读