2014-12-11 5 views
53

Я не могу создать уведомление на Android Wear, которое обновляется без мигания значка приложения, тогда как тот же код отлично работает на телефоне Android.Уведомление Android Wear предотвращает мигание значка при обновлении

Большинство упоминаться решения говорить об обновлении же уведомление, используйте setAlertOnlyOnce, сохраняя ID или когда то же самое. Тем не менее, независимо от того, что я делаю, каждый раз, когда уведомление обновляется, оно мигает (наиболее отмечено значком приложения).

Как предложено здесь Android Wear: Timer like notification card on wear device вы можете использовать setHintHideIcon (истинный), чтобы скрыть значок приложения, который скрывает мигающую часть, однако в ограниченном мире Android Wear Уведомления значок приложения играет большую роль в Брендинг заявление.

Если вы хотите использовать таймер, вы можете использовать .setUsesЧенметр (true) и пусть система обновит таймер, который отлично работает. К сожалению, если вы хотите обновить что-то еще, чем время (например, шаги или полученные сообщения), мне кажется, вам не повезло.

Ниже вы можете найти код, который отлично работает при работе в качестве приложения для телефона, но мигает при запуске в качестве загружаемого приложения.

Прокомментированная строка ниже, чтобы продемонстрировать, что уведомление все еще мигает (при беге, а не в телефоне), что уведомление все еще мигает при публикации неизмененного уведомления о пригодности для носки. Раскомментировать повторное уведомление.

mNotification = buildNotification(WearMainActivity.this); 

Поэтому мой вопрос, если кто имеет какие-либо идеи дальнейшего продукта, мы можем исследовать, чтобы сохранить уведомление от мигания, или если мы можем записать это как Android Wear ошибка?

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

Проверено на:
носимого: Moto 360 (4.4W2) Надеть эмулятора (5.0.1)
Телефоны: Galaxy Nexus (4.3) и Nexus 5 (5.0.0)

Происходит: При работе в качестве приложения Wearable или уведомления о телефоне, отображаемом на Wearable. Прекрасно работает на телефоне.

Ссылочные вопросы:
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

Прошу прощения, но я не совсем понял - это также происходит с регулярными уведомлениями в телефонных приложениях (без компонента износа), которые автоматически отражаются на часах? Потому что я тестировал этот сценарий с вашим кодом и не видел мерцания (Moto 360 с Android 5.0). – matiash

+0

Ах спасибо, что заметили это. По-видимому, когда вы обновляете уведомление на своем телефоне, система достаточно умна, чтобы не отправлять неизменное уведомление в Wearable. Чтобы уточнить, я сделал видео о поведении: https://www.youtube.com/watch?v=8QBuUjb_vTA – LearnDriver

+0

Обновление: похоже, что это не происходит на Gear Live 5.0. Итак, два варианта: а) он не мерцает там из-за его лучшего оборудования; б) он может быть исправлен в 5.0. Теперь ожидаю, когда мои часы получат обновление, чтобы подтвердить либо a, либо b ... (О, мне жаль, что я не мог просто обойти OTA;)) – LearnDriver

ответ

1

Replace:

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

к:

NotificationManagerCompat notifyMgr = 
    NotificationManagerCompat.from(this); 

Дополнительная информация: https://developer.android.com/training/wearables/notifications/creating.html

Вы также делаете много обновлений. Каждое обновление отправляется через Bluetooth для Wear. Вы должны создать приложение для самостоятельной установки Android Wear. Задержка отправки составляет около 3 секунд.

1

Я решил эту проблему некоторое время назад, когда работал с Android Wear, но код, к сожалению, ушел.Во всяком случае, я сделал это, чтобы не устанавливать уведомление каждый раз, когда я хотел его обновить. Я только что пометил уведомление в первый раз, когда я его создал, а затем я извлек его с помощью и внесла свои изменения непосредственно этому объекту. Это полностью остановило мерцание ...