2014-12-11 3 views
53

Ich kann nicht in der Lage sein, eine Android Wear-Benachrichtigung zu erstellen, die ohne blinkendes App-Symbol aktualisiert wird, während derselbe Code auf einem Android-Telefon funktioniert.Android Wear-Benachrichtigung verhindert blinkendes Symbol beim Aktualisieren

meisten referenzierten Lösungen sprechen über die gleiche Mitteilung zu aktualisieren, verwenden Sie setAlertOnlyOnce, halten die ID oder wenn gleich. Aber egal, was ich mache, jedes Mal, wenn die Benachrichtigung aktualisiert wird, blinkt sie (am häufigsten im App-Symbol).

Wie hier vorgeschlagen Android Wear: Timer like notification card on wear device Sie setHintHideIcon (true) verwenden können das App-Symbol zu verbergen, die den blinkenden Teil versteckt, aber in der begrenzten Welt der Android Wear Benachrichtigungen das App-Symbol spielt eine große Rolle in dem Branding der Anwendung.

Wenn Sie einen Timer möchten, können Sie .setUsesChronometer (true) verwenden und das System den Timer aktualisieren, der perfekt funktioniert. Leider, wenn Sie etwas anderes als die Zeit aktualisieren möchten (wie Schritte oder empfangene Nachrichten zählen), scheint es mir, dass Sie kein Glück haben.

Unten finden Sie Code, der gut funktioniert, wenn er als Telefon-App ausgeführt wird, aber blinkt, wenn er als Wearable-App ausgeführt wird.

Kommentarzeile unten, um zu zeigen, dass die Benachrichtigung immer noch blinkt (beim Tragen, nicht am Telefon), dass die Benachrichtigung immer noch blinkt, wenn eine unveränderte Benachrichtigung am Wearable gesendet wird. Kommentar entfernen, um die Benachrichtigung erneut zu aktualisieren.

mNotification = buildNotification(WearMainActivity.this); 

Daher meine Frage ist, ob jemand eine weitere Idee hat können wir halten erkunden, um die Meldung von Blinken oder wenn wir diese nach unten als Android Wear Bug schreiben kann?

public class WearMainActivity extends Activity { 

    public final int NOTIFICATION_ID= 1; 
    public Notification mNotification; 
    public int count; 
    public long when; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     count = 0; 
     when = System.currentTimeMillis(); 
     mNotification = buildNotification(WearMainActivity.this); 
     postDelayedHandler(); 
     finish(); 
    } 

    private void postDelayedHandler(){ 

     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       count++; 
       mNotification = buildNotification(WearMainActivity.this); 
       NotificationManager notifyMgr = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)); 
       notifyMgr.notify(NOTIFICATION_ID, mNotification); 
       postDelayedHandler(); 
      } 
     }, 1000L); 
    } 

    private Notification buildNotification(Context context){ 
     return new Notification.Builder(context) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle(context.getString(R.string.app_name)) 
       .setContentText("Count: "+count) 
       .setWhen(when) 
//    .setOngoing(true) //Don't do this, adds "Mute app" action 
       .setOnlyAlertOnce(true) 
       .setPriority(Notification.PRIORITY_MAX) 
       .extend(new Notification.WearableExtender() 
//      .setHintHideIcon(true) //Hides the icon, so kinda hides the blink 
       ) 
       .build(); 
    } 
} 

Getestet auf:
Wearable: Moto 360 (4.4W2) Emulator Wear (5.0.1)
Telefone: Galaxy Nexus (4.3) und Nexus 5 (5.0.0)

Tritt: Wenn Sie als Wearable-App oder als Telefonbenachrichtigung auf Wearable ausgeführt werden. Funktioniert perfekt am Telefon.

referenzierte Fragen:
How can I avoid blinking notification update while changing button
Updating an ongoing notification quietly
How to properly update a notification post api 11?

+0

Es tut mir leid, aber ich habe nicht ganz verstanden - ist dies auch mit regelmäßigen Mitteilungen in Telefon Apps passieren (kein Verschleiß Komponente), die auf die Uhr automatisch gespiegelt werden? Weil ich dieses Szenario mit deinem Code getestet habe und kein Flimmern gesehen habe (Moto 360 mit Android 5.0). – matiash

+0

Ah, danke, dass Sie das bemerkt haben. Offenbar ist das System intelligent, wenn Sie eine Benachrichtigung auf Ihrem Telefon aktualisieren, um keine unveränderte Benachrichtigung an das Wearable zu senden. Um zu klären, ich ein Video über das Verhalten gemacht haben: https://www.youtube.com/watch?v=8QBuUjb_vTA – LearnDriver

+0

Update: Dies scheint nicht auf einem Gear Live 5.0 ausgeführt passieren. Also zwei Optionen: a) Es flackert nicht dort wegen seiner besseren Hardware b) Es könnte in 5.0 behoben werden. Jetzt wartet auf meine Uhr, um das Update zu erhalten, um entweder a oder b zu bestätigen ... (Oh ich wünschte, ich könnte nur den OTA sideladen;)) – LearnDriver

Antwort

1

ersetzen:

NotificationManager notifyMgr = 
    ((NotificationManager)getSystemService(NOTIFICATION_SERVICE)); 

zu:

NotificationManagerCompat notifyMgr = 
    NotificationManagerCompat.from(this); 

Weitere Informationen: https://developer.android.com/training/wearables/notifications/creating.html

Sie machen auch viele Updates. Jedes Update wird per Bluetooth an Wear gesendet. Sie sollten die App zur Selbstinstallation für Android Wear erstellen. Die Sendeverzögerung beträgt ca. 3 Sekunden.

1

Ich habe dieses Problem vor einiger Zeit gelöst, als ich mit Android Wear gearbeitet habe, aber der Code ist leider weg.Wie auch immer, was ich tat, war nicht der Benachrichtigung BUILD jedes Mal, wenn ich sie aktualisieren wollte, habe ich markierte nur die Benachrichtigung das erste Mal, dass ich es erstellt und dann zurückgeholt ich es mit den TAG und machte mich auf Änderungen direkt zu diesem Objekt. Das vollständig gestoppt das Flackern ...