Comme vous pouvez le voir dans mon manifeste ci-dessous, j'ai ajouté l'autorisation suivante: Qu'est-ce qui me manque?
<uses-permission-sdk-m Android:name="Android.permission.WRITE_SETTINGS" />
Dans l'API 23 ou supérieure, l'utilisateur doit autoriser manuellement cette autorisation; vous pouvez vérifier en appelant- 'Paramètres.System.canWrite' ci-dessous.
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);
}
}
WRITE_SETTINGS
sous Android 6. requestPermissions
ne fonctionne pas, mais CommonsGuy a fourni une solution de contournement ici: https://stackoverflow.com/a/32083622/238753
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);
}
}
cela fonctionne comme un charme.
Ceci est un cas particulier: niveau de permision: signature,
Si l'application cible une API de niveau 23 ou supérieur, l'utilisateur de l'application doit explicitement accorder cette autorisation à l'application via un écran de gestion des autorisations.
L'application demande l'approbation de l'utilisateur en envoyant une intention avec l'action ACTION_MANAGE_WRITE_SETTINGS.
L'application peut vérifier si elle dispose de cette autorisation en appelant Settings.System.canWrite ().
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);
}
}