【问题标题】:Android 6.0 Permission Denial: requires permission android.permission.WRITE_SETTINGSAndroid 6.0 Permission Denial:需要权限 android.permission.WRITE_SETTINGS
【发布时间】:2015-08-28 08:18:21
【问题描述】:

从下面的清单中可以看到,我添加了权限,我缺少什么?

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

【问题讨论】:

标签: android android-permissions


【解决方案1】:

在 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);
                }
            }

【讨论】:

  • 在 else 条件下如何处理活动的结果?我怎么知道我的应用是否授予了权限?
  • @Mohammad 你可以再次登录onResume()
  • 如果亮度不在手动模式下,这不起作用。要将亮度设置为手动,请执行:Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); stackoverflow.com/a/36001592/175225
  • 我已经尝试过动态更改铃声,但没有奏效。检查我的新答案,看看是否适合你。
【解决方案2】:

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

【讨论】:

    【解决方案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);
            }
        }
    

    这就像一个魅力。

    【讨论】:

      【解决方案4】:

      这是一个特殊情况:权限级别:签名,

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

      应用通过发送带有操作 ACTION_MANAGE_WRITE_SETTINGS 的意图来请求用户的批准。

      应用可以通过调用Settings.System.canWrite()来检查它是否有这个权限。

      【讨论】:

        【解决方案5】:
        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);
                    }
                }
        

        【讨论】:

          【解决方案6】:
          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);
                      }
                  }
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-10-26
              • 1970-01-01
              • 2016-10-07
              • 2016-12-22
              • 2018-09-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多