2015-09-03 7 views
29

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?

enter image description here

+0

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 ... –

+0

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

+0

@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

Antwort

52

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.

+0

Super, arbeitet auch in Marshmallow! –

+0

@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) –

+0

@ 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

4

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

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); 
5

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); 
} 
+0

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

0
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); 
    } 
Verwandte Themen