Подтвердить что ты не робот

Уведомление Android Wear предотвращает мигание значка при обновлении

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

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

Как предложено здесь Android Wear: Timer, как плата уведомлений на устройстве для изнашивания, вы можете использовать setHintHideIcon (true), чтобы скрыть значок приложения, который скрывает мигающую часть, однако в ограниченном мире Android Wear Notifications значок приложения играет большую роль в брендинге приложения.

Если вы хотите использовать таймер, вы можете использовать .setUsesChronometer(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();
    }
}

Протестировано:
Wearable: Moto 360 (4.4W2) Эмулятор износа (5.0.1)
Телефоны: Galaxy Nexus (4.3) и Nexus 5 (5.0.0)

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

Связанные вопросы:
Как я могу избежать мигания обновления уведомлений при изменении кнопки
Обновление текущего уведомления тихо
Как правильно обновить сообщение оповещения api 11?

4b9b3361

Ответ 1

Заменить:

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

в

NotificationManagerCompat notifyMgr =
    NotificationManagerCompat.from(this);

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

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

Ответ 2

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