Android Wear通知会在更新时阻止闪烁图标

时间:2014-12-11 19:26:24

标签: android wear-os android-wear-notification

我似乎无法创建Android Wear通知,更新时不会闪烁应用程序图标,而相同的代码在Android手机上正常工作。

大多数引用的解决方案都涉及更新相同的通知,使用 setAlertOnlyOnce ,在时保持 ID 。但是,无论我做什么,每次更新通知时它都会闪烁(最常见的是应用程序图标)。

正如Android Wear: Timer like notification card on wear device所建议的那样,您可以使用 setHintHideIcon(true)隐藏应用程序图标,该图标会隐藏闪烁的部分,但是在Android Wear通知的有限世界中,应用程序图标会播放很大程度上是应用程序的品牌推广。

如果你想要一个计时器,你可以使用 .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();
    }
}

测试:
可穿戴:Moto 360(4.4W2)磨损仿真器(5.0.1)
电话:Galaxy Nexus(4.3)和Nexus 5(5.0.0)

发生:作为可穿戴应用程序运行或作为可穿戴设备上显示的电话通知运行时。在手机上完美运作。

参考问题:
How can I avoid blinking notification update while changing button
Updating an ongoing notification quietly
How to properly update a notification post api 11?

2 个答案:

答案 0 :(得分:1)

替换:

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

为:

NotificationManagerCompat notifyMgr =
    NotificationManagerCompat.from(this);

更多信息:https://developer.android.com/training/wearables/notifications/creating.html

您还进行了大量更新。每次更新都通过蓝牙发送到Wear。您应该为Android Wear创建自安装应用。发送延迟大约是3秒钟。

答案 1 :(得分:1)

当我使用Android Wear时,我解决了这个问题,但不幸的是代码不见了。无论如何,我做的是每次我想要更新它时都没有构建通知,我只是在第一次创建它时标记了通知,然后我使用TAG检索了它,并直接对该对象进行了更改。这完全阻止了闪烁......