J'ai une question concernant la nouvelle version d'Android Marshmallow:
Est-il possible d'afficher l'écran d'autorisation pour une application spécifique via une intention ou quelque chose de similaire?
Il est possible d'afficher les paramètres de l'application avec le code suivant. Existe-t-il une solution analogique permettant d'ouvrir directement l'écran d'autorisation?
startActivity(new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", getPackageName(), null)));
J'ai déjà fait quelques recherches à ce sujet mais je n'ai pas pu trouver de solution adéquate - j'apprécierais toute aide!
Selon la vidéo officielle des autorisations de Marshmallow (au niveau 4m 43s ), vous devez ouvrir la page Paramètres de l'application (à partir de là, cliquez sur la page Autorisations en un clic).
Pour ouvrir la page des paramètres, vous feriez
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
Ce n'est pas possible. J'ai essayé de le faire aussi. Je pourrais trouver le nom du paquet et l'activité qui sera démarrée. Mais à la fin, vous obtiendrez une exception de sécurité en raison d'une autorisation manquante que vous ne pourrez pas déclarer.
METTRE À JOUR:
En ce qui concerne l'autre réponse, je vous recommande également d'ouvrir l'écran des paramètres de l'application. Je le fais avec le code suivant:
public static void startInstalledAppDetailsActivity(final Activity context) {
if (context == null) {
return;
}
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
}
Comme je ne veux pas avoir cela dans ma pile d'historique, je le supprime en utilisant des indicateurs d'intention.
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
DescriptionSettings.ACTION_APPLICATION_DETAILS_SETTINGS
Ouvre la page de configuration des détails pour App. À partir de là, l'utilisateur doit attribuer manuellement l'autorisation souhaitée.
Intent.FLAG_ACTIVITY_NEW_TASK
Facultatif . Si défini, ouvre alors l'écran Paramètres (Activité) en tant que nouvelle activité. Sinon, il sera ouvert dans l'activité en cours.
Uri.fromParts("package", getPackageName(), null)
Prépare ou crée l'URI, alors que getPackageName () - renvoie le nom de votre package d'application.
intent.setData(uri)
N'oubliez pas de définir ceci . Sinon, vous obtiendrez Android.content.ActivityNotFoundException
. Parce que vous avez défini votre intention sur Settings.ACTION_APPLICATION_DETAILS_SETTINGS
et qu'Android attend qu'un nom soit recherché.
Au lieu de cela, vous pouvez ouvrir les paramètres généraux de certaines applications avec une seule ligne
startActivity(new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
Il n'est pas possible d'ouvrir de manière pragmatique l'écran d'autorisation. Au lieu de cela, nous pouvons ouvrir l'écran des paramètres de l'application.
Code
Intent i = new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivity(i);
Exemple de sortie
Si vous voulez écrire moins de code dans Kotlin
, vous pouvez faire ceci:
fun Context.openAppSystemSettings() {
startActivity(Intent().apply {
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", packageName, null)
})
}
Basé sur Martin Konecny answer
Si nous parlons de FLYME OS (Meizu) ONLY il existe sa propre application de sécurité avec autorisations.
Pour l'ouvrir, utilisez l'intention suivante:
public static void openFlymeSecurityApp(Activity context) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
try {
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
La cause BuildConfig est la version de votre application BuildConfig .
Peut-être que cela vous aidera
private void openSettings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 101);
}
Xamarin Forms Android:
//---------------------------------------------------------
public void OpenSettings()
//---------------------------------------------------------
{
var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
Android.Net.Uri.Parse("package:" + Forms.Context.PackageName));
Forms.Context.StartActivity(intent);
}
ce n'est pas possible pour obtenir la permission de façon pragmatique ... mais je vous suggère mal de mettre cette ligne de code dans try {} catch {}, ce qui rendra malheureusement votre application obsolète ... et dans catch body make une boîte de dialogue qui permettra à l'utilisateur d'accéder à un petit tutoriel pour activer l'autorisation de dessiner par rapport aux autres applications ... puis cliquez sur le bouton Oui pour mettre ce code ...
Intent callSettingIntent= new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(callSettingIntent);
cette intention est de ouvrir directement la liste des tirages par-dessus d’autres applications pour gérer les autorisations, puis à partir d’ici c’est un clic vers le tirage par rapport aux autres applications Autorisations ... Je sais que ce n’est pas la réponse que vous avez cherchez ... mais je le fais dans mes applications ...