Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android磨损通知防止更新时图标闪烁_Android_Wear Os_Android Wear Notification - Fatal编程技术网

Android磨损通知防止更新时图标闪烁

Android磨损通知防止更新时图标闪烁,android,wear-os,android-wear-notification,Android,Wear Os,Android Wear Notification,我似乎无法创建一个Android Wear通知,在不闪烁应用程序图标的情况下进行更新,而同样的代码在Android手机上运行良好 大多数引用的解决方案都谈到更新相同的通知、使用setAlertOnlyOnce、保持ID或相同的时间。但是,无论我做什么,每次更新通知时,它都会闪烁(最明显的是应用程序图标) 正如这里所建议的,您可以使用setHintHideIcon(true)隐藏应用程序图标,这会隐藏闪烁部分,但是在Android Wear通知的有限世界中,应用程序图标在应用程序的品牌中扮演着重要

我似乎无法创建一个Android Wear通知,在不闪烁应用程序图标的情况下进行更新,而同样的代码在Android手机上运行良好

大多数引用的解决方案都谈到更新相同的通知、使用setAlertOnlyOnce、保持ID或相同的时间。但是,无论我做什么,每次更新通知时,它都会闪烁(最明显的是应用程序图标)

正如这里所建议的,您可以使用setHintHideIcon(true)隐藏应用程序图标,这会隐藏闪烁部分,但是在Android Wear通知的有限世界中,应用程序图标在应用程序的品牌中扮演着重要角色

如果你想要一个定时器,你可以使用.setUsesChronometer(true),让系统更新工作正常的定时器。不幸的是,如果你想更新时间以外的内容(如步骤或收到的消息计数),我觉得你运气不好

下面的代码可以在作为手机应用程序运行时正常工作,但在作为可穿戴应用程序运行时闪烁

下面的注释行表明,当在可穿戴设备上发布未更改的通知时,通知仍会闪烁(当在穿戴设备上运行时,而不是在手机上运行时)。取消注释以再次更新通知

mNotification = buildNotification(WearMainActivity.this);
因此,我的问题是,是否有人有任何进一步的想法,我们可以探索以防止通知闪烁,或者我们是否可以将其记为Android Wear bug

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)

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

参考问题:


更换:

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

更多信息:


你也做了很多更新。每次更新都通过蓝牙发送给佩戴者。你应该创建Android Wear的自安装应用程序。发送延迟约为3秒。

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

很抱歉,我不太明白——手机应用程序(无磨损组件)中的定期通知是否也会自动镜像到手表上?因为我用你的代码测试了这个场景,没有看到闪烁(Moto360和Android 5.0)。啊,谢谢你注意到了这一点。显然,当你在手机上更新通知时,系统足够智能,不会向可穿戴设备发送未更改的通知。为了澄清这一点,我制作了一个行为视频:更新:这似乎不会发生在Gear Live running 5.0上。所以有两种选择:a)由于其更好的硬件,它不会在那里闪烁b)它可能会在5.0中修复。现在正在等待我的手表接收更新以确认a或b。。。(哦,我希望我能把OTA放在一边;)我会打赌(b)。我们将看到:)所以我刚刚得到了5.0更新(花了他们足够长的时间!),答案是:是和否!当您从手机上启动的应用程序收到扩展通知时,它会无缝工作,不会闪烁。但是,如果您从手表启动应用程序,它仍然会闪烁。所以现在我们有两种不同的行为基于通知的来源。。。
NotificationManagerCompat notifyMgr =
    NotificationManagerCompat.from(this);