Android 6.0权限拒绝:需要权限android.permission.WRITE_SETTINGS

时间:2015-08-28 08:18:22

标签: android android-permissions

从下面的清单中可以看出,我已经添加了许可,我缺少什么?

<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />

7 个答案:

答案 0 :(得分:54)

在API 23或更高版本中,用户必须手动授权此权限,您可以通过调用 - “Settings.System.canWrite”进行检查,以下是此实现: -

           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (Settings.System.canWrite(context)) {
                    // Do stuff here
                }
                else {
                    Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
                    intent.setData(Uri.parse("package:" + getActivity().getPackageName()));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }

答案 1 :(得分:4)

事实证明,您需要在Android 6中使用不同的机制授予WRITE_SETTINGSrequestPermissions不起作用,但CommonsGuy在此处提供了一种解决方法:https://stackoverflow.com/a/32083622/238753

答案 2 :(得分:3)

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.System.canWrite(getApplicationContext())) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 200);
        }
    }

这就像一个魅力。

答案 3 :(得分:0)

这是一个特例:permision level:signature,

如果应用针对API级别23或更高级别,则应用用户必须通过权限管理屏幕向应用明确授予此权限。

该应用通过发送动作ACTION_MANAGE_WRITE_SETTINGS来请求用户的批准。

应用可以通过调用Settings.System.canWrite()来检查它是否具有此授权。

答案 4 :(得分:0)

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            boolean settingsCanWrite = Settings.System.canWrite(this);

            if(!settingsCanWrite) {
                Toast.makeText(this, "Require Permission to Handle Screen Brightness", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                startActivity(intent);
            }
        }

答案 5 :(得分:0)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.System.canWrite(getApplicationContext())) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 200);
            }
        }

答案 6 :(得分:-1)

这取决于API级别和Android构建版本