2016-05-31 19 views
0

Dies ist die Methode, die ich abrufen,/create/Benachrichtigung des Update-App in einer Serviceklasse, genannt PlayerService:Android appcompat v7 Unterstützung Bibliothek Mitteilung kompakte Ansicht Wiederholung Tasten Ausgabe

import android.support.v7.app.NotificationCompat; 
    import android.app.Notification; 
    import android.app.NotificationManager; 

    // ... 
     private Notification getCompatNotification(String contentText) { 
       m_notificationBuilder 
         .setSmallIcon(R.drawable.ic_launcher) 
         .setContentTitle("PlayerService") 
         .setContentText(contentText) 
         .setContentIntent(null) 
         .setWhen(0) 
         .setShowWhen(false) 
         .addAction(android.R.drawable.ic_media_previous, "", null) 
         .addAction((isPlaying() ? android.R.drawable.ic_media_pause : android.R.drawable.ic_media_play), "", null) 
         .addAction(android.R.drawable.ic_media_next, "", null) 
         .setStyle(new NotificationCompat.MediaStyle()          
           .setShowActionsInCompactView(0, 1, 2) 
           .setShowCancelButton(true) 
           .setCancelButtonIntent(null)) 
         .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) 
         .setPriority(NotificationCompat.PRIORITY_MAX); 

       Notification notification = m_notificationBuilder.build(); 

       return notification; 
      } 

Wenn nun die Media-Player-Aktivität geöffnet, aber die Wiedergabe wurde nicht gestartet, die Benachrichtigung zeigt ihre große Ansicht mit diesen 3 Aktionstasten (vorher, Wiedergabe/Pause, nächste), aber wenn die Wiedergabe gestartet wird, wechselt die Benachrichtigungsansicht zu kompakt und zeigt diese 3 Tasten an erster Stelle und dann wieder an der erste und der zweite. Bitte sehen Sie sich die Bilder an.
Testgerät hat KitKat 4.4.4.

Nein Wiedergabe
enter image description here


Wiedergabe gestartet
enter image description here

Benachrichtigung zu aktualisieren:

private void updateNotification(String contentText){ 
       nm.notify(NOTIFICATION_ID, getCompatNotification(contentText)); 
} 

Und in onCreate():

@Override 
    public void onCreate() { 
     super.onCreate(); 
     nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     m_notificationBuilder = new NotificationCompat.Builder(this); 
} 

In onStartCommand() :

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
       startForeground(NOTIFICATION_ID, getCompatNotification("Test Content")); 
     return START_STICKY; // run until explicitly stopped. 
    } 


herauszufinden Kann nicht, was das Problem ist. Jede Hilfe wird sehr geschätzt.

Antwort

1

Sie sind die gleichen NotificationCompat.Builder Instanz mit Ihrem Benachrichtigungen erstellen und wenn Sie eine Aktion hinzufügen es wird hinzugefügt, um die vorherigen Liste und erstellt ein unerwünschtes Verhalten in der System API. Sie müssen zuerst clearActions() im Builder aufrufen, bevor Sie beliebige hinzufügen, wenn Sie dieselbe Builder-Instanz verwenden möchten.

+0

Ihre Antwort ist ein sehr guter Punkt, aber es gibt keine Methode wie ClearActions() für NotificationCompat.Builder. Abgesehen davon, kann ich nicht verstehen, warum ist das nirgends angegeben? Ist es nicht empfehlenswert, das gleiche Builder-Objekt für Erstellungs-/Aktualisierungsvorgänge zu verwenden? –

+0

Ok, es sieht so aus, als ob eine Anfrage zum Hinzufügen dieser Methoden (clearActions und removeAction) vorliegt - [Problem 207040]: (https://code.google.com/p/android/issues/detail?id=207040). Für den Moment kann ich 'm_notificationBuilder.mActions.clear();' @mariusc vielen Dank! –

0

Hoffnung könnte dies helfen: add android:stateListAnimator="@null" auf Ihre Schaltfläche

+0

Meine Schaltflächen werden von der addActions() -Methode des notificationBuilder-Objekts erstellt. Es handelt sich nicht um ein benutzerdefiniertes Layout, sondern um die v7-Bibliotheksunterstützung, die die Erstellung von Benachrichtigungen mit MediaStyle-Format ermöglicht. –