Gibt es eine Möglichkeit, eine Absicht zu starten, um den Benachrichtigungseinstellungen-Bildschirm von Android für meine App aufzurufen (siehe unten)? Oder ein einfacher Weg, um einen PreferenceScreen-Artikel zu erstellen, der hier nur auf einen Klick führt?Gibt es eine Möglichkeit, mit den Android-Benachrichtigungseinstellungen für meine App zu verknüpfen?
Antwort
Im Folgenden wird in Android 5.0 (Lollipop) arbeiten und oben:
Intent intent = new Intent();
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
//for Android 5-7
intent.putExtra("app_package", getPackageName());
intent.putExtra("app_uid", getApplicationInfo().uid);
// for Android O
intent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName());
startActivity(intent);
Weitere Informationen: Diese in Android unterstützt nicht offiziell 5-7, aber es funktioniert gut. Es wird offiziell von Android O unterstützt. Dieser Code ist nicht rückwärts kompatibel mit Versionen von Android vor 5.0.
Super, arbeitet auch in Marshmallow! –
@shhp - Vielen Dank für diese Antwort. Funktioniert auch in N Vorschau. Würden Sie bitte in ein paar Worten sagen, wie Sie diese Lösung gefunden haben? Das am weitesten Entfernte, was ich in dieser Untersuchung bekommen habe, war diese Log-Nachricht: 'com.android.settings D/SubSettings: Das Fragment com.android.settings.notification.AppNotificationSettings wird gestartet, wenn man in den App-Einstellungen auf die Zeile" Notifications "klickt. [link2src] (https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/notification/AppNotificationSettings.java) –
@ Dev-iL erhalten Sie den ersten Schritt . Dann habe ich den Quellcode überprüft, um zu sehen, welche Extras in die "Absicht" geschrieben werden sollten :-) – shhp
Ich benutze diesen Code (kitkat und nächsten Versionen):
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Intent intent = new Intent();
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", getActivity().getPackageName());
intent.putExtra("app_uid", getActivity().getApplicationInfo().uid);
startActivity(intent);
} else if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getActivity().getPackageName()));
startActivity(intent);
}
ich die Lösung von Sergei und shhp fusionierte die Fälle, alle zu unterstützen:
Intent intent = new Intent();
if(android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
}else if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
}else {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
}
context.startActivity(intent);
Ich habe hängten Kanal Benachrichtigungseinstellungen für Android 8.0 Oreo API 26 oder höher. Es gibt eine Lösung von Android 4.4, KitKat.
Verwendung für Channel Benachrichtigungseinstellungen:
// PRIMARY_CHANNEL:
goToNotificationSettings(getString(R.string.PRIMARY_CHANNEL), mContext);
// SECONDARY_CHANNEL:
goToNotificationSettings(getString(R.string.SECONDARY_CHANNEL), mContext);
Verwendung für App-Benachrichtigungseinstellungen:
goToNotificationSettings(null, mContext);
Verfahren goToNotificationSettings:
public void goToNotificationSettings(String channel, Context context) {
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (channel != null) {
intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel);
} else {
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
}
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
} else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
}
context.startActivity(intent);
}
Settings.ACTION_APP_NOTIFICATION_SETTINGS ist über API> = Build.VERSION_CODES.O verfügbar und sollte daher nicht auf N_MR1 https://developer.android.com/reference/android/provider/Settings.html#ACTION_APP_NOTIFICATION_SETTINGS verwendet werden – Ante
public static void goToNotificationSettings(Context context) {
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.fromParts(SCHEME, context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
} else {
return;
}
context.startActivity(intent);
}
- 1. JSON-LD - eine Möglichkeit, es zu verknüpfen?
- 2. Gibt es eine Möglichkeit, meine iPhone App programmatisch an den Hintergrund zu senden
- 3. iOS/Swift - Gibt es eine Möglichkeit, unsere App als WhatsApp-Nachricht zu verknüpfen?
- 4. Gibt es eine Möglichkeit, meine WCF-Einstellungen programmatisch zu setzen?
- 5. Gibt es eine Möglichkeit, meine Liste der Fernbedienungen zu schieben?
- 6. Gibt es eine Möglichkeit für den Server, Daten ohne Push-Benachrichtigungen in eine App zu übertragen?
- 7. Gibt es eine Möglichkeit, eine Express-App zu booten?
- 8. Gibt es eine Möglichkeit, den Ordner mit Passwort zu schützen?
- 9. Gibt es eine Möglichkeit, beim Start eine elastische IP-Adresse mit der EC2-Instanz zu verknüpfen?
- 10. Gibt es eine Möglichkeit, eine HTTP-Anfrage an meine localhost
- 11. Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer, der meine App installiert hat, meine App wirklich installiert hat?
- 12. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 13. Gibt es eine Möglichkeit, einen Befehl mit einem WPF-Toolkit DataGridHyperlinkColumn zu verknüpfen?
- 14. Gibt es eine Möglichkeit, den LaunchScreen programmatisch zu kodieren
- 15. Gibt es eine Möglichkeit, den Gerätekontexttyp zu unterscheiden?
- 16. Android: Gibt es eine Möglichkeit, den Barcode-Scanner in eine App zu implementieren?
- 17. Gibt es eine clevere Möglichkeit, meine Silverlight-App bereitzustellen und Einstellungen programmgesteuert zu ändern?
- 18. Gibt es eine Möglichkeit, den Pufferspeicher zu überprüfen?
- 19. Gibt es eine Möglichkeit, eine Variable für "isForEachable" zu testen?
- 20. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 21. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 22. Gibt es eine einfache Möglichkeit, verschachtelte Daten mit Lodash zu verknüpfen?
- 23. Gibt es eine Möglichkeit, den `enum` -Typ vorzeichenlos zu machen?
- 24. Gibt es eine Möglichkeit, den ViewState MAC zu berechnen?
- 25. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 26. Gibt es eine Möglichkeit, den Emacs-Tastaturkürzel zu deaktivieren?
- 27. Gibt es eine Möglichkeit, den Rückgabetyp Arrays.asList zu zwingen
- 28. Gibt es eine Möglichkeit, den Typ eines Mountpoints zu bestimmen?
- 29. Gibt es eine Möglichkeit, einen Subprozess mit Pydev zu debuggen?
- 30. Gibt es eine Möglichkeit, den JFace ElementTreeSelectionDialog ungefaltet zu öffnen?
Es sieht aus wie Settings.ACTION_APPLICATION_DETAILS_SETTINGS Ich werde versuchen, einen Schritt weiter in die Benachrichtigungseinstellungen auf dem App-Info-Bildschirm zu gelangen ... –
Während wir bei @mohamed-hafez sind, könntest du erklären, wie du es gemacht hast diesen "App settings" -Eintrag hier zu verankern? Ich gehe davon aus, dass es im Manifest über einen Intent-Filter gemacht wurde, habe es aber nicht geschafft. Vielen Dank! – Gabriel
@Gabriel, sieht aus, als hättest du schon die Antwort auf deine Frage gefunden, aber für jeden anderen Interessierten lautet die Antwort [hier] (http://stackoverflow.com/a/28710214/238753). – Sam