Я не могу предоставить разрешения WRITE_SETTING в Android с API 23 - PullRequest
1 голос
/ 22 июня 2019

Я пытался предоставить разрешения WRITE_SETTING, чтобы разрешить моему приложению увеличивать яркость при просмотре. Я пробовал приведенный ниже код, как указано в документации по Android, но каждый раз, когда не появляется всплывающее окно, позволяющее пользователю принять или отклонить разрешение, которое я пытался отлаживать код grantResults [0] всегда равен -1

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.WRITE_SETTINGS
            ) != PackageManager.PERMISSION_GRANTED
        ) {

            // Permission is not granted
            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_SETTINGS)) {
                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.
            } else {
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(Manifest.permission.WRITE_SETTINGS),
                    10
                )

                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        } else {
            Settings.System.putInt(
                this.contentResolver,
                Settings.System.SCREEN_BRIGHTNESS, 255
            )
        }


    }

    override fun onRequestPermissionsResult(requestCode: Int,
                                            permissions: Array<String>, grantResults: IntArray) {
        when (requestCode) {
            10 -> {
                // If request is cancelled, the result arrays are empty.
                if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {

                    Settings.System.putInt(
                        this.contentResolver,
                        Settings.System.SCREEN_BRIGHTNESS,255
                    )
                } else {
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return
            }

            // Add other 'when' lines to check for other
            // permissions this app might request.
            else -> {
                // Ignore all other requests.
            }
        }
    }

}

1 Ответ

0 голосов
/ 22 июня 2019

WRITE_SETTINGS не тот, который вы можете запросить через requestPermissions(). Это только для dangerous разрешений, а WRITE_SETTINGS не имеет этого protectionLevel.

Цитирование Документация :

Примечание. Если приложение предназначено для уровня API 23 или выше, пользователь приложения должен явно предоставить это разрешение приложению через экран управления разрешениями. Приложение запрашивает одобрение пользователя, отправив намерение с действием Settings.ACTION_MANAGE_WRITE_SETTINGS. Приложение может проверить, есть ли у него это разрешение, позвонив по номеру Settings.System.canWrite().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...