Wenn Sie auf Android-Benachrichtigung klicken, wird die Benachrichtigungsschublade nicht geschlossen

Ich füge eine Benachrichtigung an Systemleiste mit der NotificationCompat Bibliothek hinzu. Diese Benachrichtigung hat zwei Aktionstasten. Auch die AutoCancel() Eigenschaft auf der Benachrichtigung ist auf true gesetzt.

Ein Klick auf die Aktionstasten, System ist so konfiguriert, dass ein IntentService der NotificationManager.cancel(NOTIFICATION_ID) und dann eine Aktivität in einer neuen Aufgabe startet.
Problem ist, dass, obwohl dieser Anruf die Benachrichtigung aus dem Fach entfernt, es nicht kollabiert die Schublade. Die angerufene Aktivität wird hinter der Schublade gezogen.

  • Volley-String-Anforderungsfehler beim Übergeben von String mit Nullwert als Param
  • Null-Zeiger Ausnahme in Anregungen Popup-Fenster auf Samsung Galaxy Android 7
  • Android View Clipping
  • Was ist sicherer: Externer Browser oder ChromeTab zur Autorisierung?
  • Design Android EditText, um Fehlermeldung zu zeigen, wie von Google beschrieben
  • Gibt es eine Möglichkeit, das Fading zu deaktivieren, dass ein ViewPager Scroll zu Kanten hat?
  • Kann jemand bitte etwas Licht auf, was spezielle Code ist, um die Ziehung abgesehen von der Annullierung der Benachrichtigung zu schließen?

    Vielen Dank.

  • OpenCV Template Matching Beispiel in Android
  • Block Home Button in Eis Sandwich und Jelly Bean
  • Fehler beim Hinzufügen von Bibliotheksprojekt in Eclipse
  • Bilder, die nicht in Fresko geladen werden
  • Abstand zwischen den Tasten entfernen
  • Wie kann ich eine Datei mit adb.exe durchsuchen?
  • 4 Solutions collect form web for “Wenn Sie auf Android-Benachrichtigung klicken, wird die Benachrichtigungsschublade nicht geschlossen”

    Wenn Ihre Aktion in Form einer Sendung oder einer Dienstleistung ist, aber Sie beabsichtigen, dass die Benachrichtigungsschublade zusammengebrochen wird, sollten Sie android.intent.action.CLOSE_SYSTEM_DIALOGS von Ihrem onReceive aussenden. Dies schließt die Schublade manuell.

    Ich habe festgestellt, dass, wenn Sie die Aktionstasten in erweiterten Benachrichtigungen verwenden, müssen Sie extra Code schreiben und Sie sind mehr eingeschränkt.

    Vor der Verwendung von erweiterten Benachrichtigungen war die Standardaktion in meiner Datei-Download-Benachrichtigung, eine VIEW-Aktivität in der Datei zu starten. Die VIEW-Absicht wurde von einer Wünsche abgewickelt. Ich konnte keine ausstehende Absicht für die Auswahl der Auswahl direkt aus der Benachrichtigung verwenden, weil die Auswahl würde abstürzen, wenn es keine Aktivität gab, um den Dateityp anzuzeigen. Also hatte ich einen BroadcastReceiver, der die Chooser-Absicht starten würde.

    Mit erweiterten Benachrichtigungen habe ich beschlossen, die Datei Download-Benachrichtigung zu ändern, so dass die Standard-Aktion ist, um die Datei Details Aktivität, mit Aktionstasten für Ansicht und Senden zu zeigen. Wie von user2536953 angemerkt, schließt das Starten eines Broadcast-Empfängers aus der Benachrichtigung die Benachrichtigungsschublade nicht. Basierend auf seinen Informationen, dass eine Aktivität würde die Schublade zu schließen, änderte ich meine Broadcast-Empfänger zu einer NotificationActivity ohne UI.

    Wie in diesem Beitrag angegeben Wie kann ich die Android-Benachrichtigung beenden , nachdem die Aktion angeklickt wurde , ist ein anderes Problem, dass du deine Benachrichtigung manuell abbrechen musst, wenn der Benutzer auf eine Aktionstaste klickt. Die Benachrichtigung wird nur für die Standardaktion automatisch storniert. Ich habe auch Code in NotificationActivity hinzugefügt, um dies zu behandeln.

    Erstellen der erweiterten Benachrichtigung mit Ansicht und Senden von Schaltflächen:

      NotificationCompat.Builder builder = new NotificationCompat.Builder(m_context).setAutoCancel(true); final PendingIntent contentIntent = DownloadedFileIntentUtils.buildPendingItemDetailIntent(m_context, item); builder.setContentIntent(contentIntent); PendingIntent viewIntent = DownloadedFileIntentUtils.buildNotificationActionIntent(m_context, Intent.ACTION_VIEW, m_context.getString(R.string.action_open), uri, MimeTypeUtil.getMimeType(item), id); builder.addAction(R.drawable.actionbar_open_with, m_context.getString(R.string.action_open), viewIntent); PendingIntent sendIntent = DownloadedFileIntentUtils.buildNotificationActionIntent(m_context, Intent.ACTION_SEND, m_context.getString(R.string.action_send), uri, MimeTypeUtil.getMimeType(item), id); builder.addAction(R.drawable.actionbar_share, m_context.getString(R.string.action_send), sendIntent); builder.setTicker(title) .setContentTitle(title) .setContentText(text) .setSmallIcon(R.drawable.notification_download); .setStyle(new NotificationCompat.BigTextStyle().bigText(text)); getNotificationManager().notify(id, builder.build()); 

    Aufbau der Absicht, eine Aktivität aus den Benachrichtigungsschaltflächen zu starten:

      public static PendingIntent buildNotificationActionIntent(Context context, String action, String actionTitle, Uri uri, String mimeType, int notificationId) { // Build the file action intent (eg VIEW or SEND) that we eventually want to start. final Intent fileIntent = buildFileActionIntent(action, actionTitle, uri, mimeType); // Build the intent to start the NotificationActivity. final Intent notificationIntent = new Intent(context, NotificationActivity.class); // This flag must be set on activities started from a notification. notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Pass the file action and notification id to the NotificationActivity. notificationIntent.putExtra(Intent.EXTRA_INTENT, fileIntent); notificationIntent.putExtra(IIntentCode.INTENT_EXTRA_NOTIFICATION_ID, notificationId); // Return a pending intent to pass to the notification manager. return PendingIntent.getActivity(context, s_intentCode.getAndIncrement(), notificationIntent, PendingIntent.FLAG_ONE_SHOT); } public static Intent buildFileActionIntent(String action, String actionTitle, Uri uri, String mimeType) { Intent intent = new Intent(action); intent.addCategory(Intent.CATEGORY_DEFAULT); if (action.equals(Intent.ACTION_SEND)) { intent.putExtra(Intent.EXTRA_STREAM, uri); intent.setType(mimeType); } else { intent.setDataAndType(uri, mimeType); } intent.putExtra(Intent.EXTRA_TITLE, actionTitle); // Grant read permission on the file to other apps without declared permission. int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION; intent.setFlags(flags); return intent; } 

    Benachrichtigungsaktivität ohne UI:

     public class NotificationActivity extends Activity { private final static Logger s_logger = LogUtil.getLogger(NotificationActivity.class); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); // Cancel the notification that initiated this activity. // This is required when using the action buttons in expanded notifications. // While the default action automatically closes the notification, the // actions initiated by buttons do not. int notificationId = intent.getIntExtra(IIntentCode.INTENT_EXTRA_NOTIFICATION_ID, -1); if (notificationId != -1) { NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.cancel(notificationId); } // If there is an activity to handle the action, start the file action. if (DownloadedFileIntentUtils.verifyActivityIsAvailable(this, fileActionIntent, false)) { fileActionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); DownloadedFileIntentUtils.startFileActionActivity(this, fileActionIntent); } // Finish activity. finish(); } public static void startFileActionActivity(Context context, Intent fileActionIntent) { // Start chooser intent. Intent chooser = Intent.createChooser(fileActionIntent, fileActionIntent.getStringExtra(Intent.EXTRA_TITLE)); // Copy the flags from fileActionIntent to chooser intent. // FileActionExecutor must set FLAG_ACTIVITY_NEW_TASK on the intent passed to startActivity // because the flag is required when starting an activity from a context that is not an activity. chooser.addFlags(fileActionIntent.getFlags()); context.startActivity(chooser); } 

    Vergessen Sie nicht, NotificationActivity zu AndroidManifest.xml hinzuzufügen.

    Während ich gründlich schätze, dass Soumyajyotis Antwort richtig sein sollte … ist es in der Tat nicht …

    ich benutze

     Intent CR = new Intent(CRCODE); PendingIntent.getBroadcast(getApplicationContext(), MY_ID, CR, 0); 

    In einem Remoteview-Layout für eine laufende Benachrichtigung …

    Ich kann Ihnen versichern, dass es die Schublade nicht schließt, aber die Absicht abbricht und die Aktivität hinter der geöffneten Schublade zieht, sowie die anderen Aufgaben, die ich meinem Empfänger zugewiesen habe …

    Ich habe getestet sowohl getActivity, und getService (keiner von denen wird in meinem Umstand arbeiten, ich muss mehrere Absicht auf Recieve feuern) und beide schließen die Schublade richtig …

    Ich weiß, dass dies keine Antwort ist, aber wann und wenn ich es finde, werde ich berichten, um dies zu bearbeiten …

    Verrückte Gedanken … vielleicht eine Aktivität ohne Content-Ansicht könnte als Broadcast-Receiver aufgerufen werden, der die passenden Intentionen auf andere Klassen oder Apps wie nötig auslösen würde …

    Der verrückte Gedanke oben aufgeführt funktioniert … eine Aktivität mit PendingIntent.getActivity starten und es verwenden, um Sendungen oder andere Absicht weiterzuleiten, dann beenden Sie sich … der Effekt ist nicht direkt, aber für den Endbenutzer nicht wahrnehmbar

    Das Android-System kollabiert die Benachrichtigungsschublade für Sie, wann immer Sie auf eine Benachrichtigung klicken und eine Aktivität oder Sendung starten. Ich glaube nicht, dass es irgendeinen programmatischen Weg gibt, die Benachrichtigungsschublade durch Ihren Code zu schließen. Ich schlage vor, dass Sie die Absicht überprüfen, die Sie an den Benachrichtigungs-Erbauer übergeben und sicherstellen, dass sie korrekte Bezugsziele gegeben werden. Ich denke, etwas in der Android-Benachrichtigung Manager wird immer blockiert aufgrund der Absicht, die Sie bieten. Bisher habe ich nicht gesehen, dass die Benachrichtigungsschublade offen bleibt, sobald die Aktion aus der Benachrichtigung ausgelöst wird. Nur neugierig zu wissen, ob Ihre Ziel-Aktivität hat eine semitransparente Bereich, wo die vorherige Aktivität sichtbar ist, wenn es dann ist, schlage ich vor, Sie machen den Hintergrund vollständig undurchsichtig (ohne transparente / halb transparente Region). Vielleicht ist das der Verhinderung der androiden Heimatstarter, um die Stoppsequenz abzuschließen und damit den Launcher nicht dazu zu bringen, die Benachrichtigungsschublade für Sie zu schließen. Hoffe, ich konnte dir helfen. Alles Gute.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.