应用启动后显示常驻通知栏。声音 和 震动这块设置都是默认的,也可以说就没有重新设置这块。默认就是常驻通知栏显示时是震动,是响铃,还是静音,都是跟系统设置来的。
这样运行了一段时间,没有太大问题。忽然有一天,有用户留言说自己的手机打开我们的应用后一直在响。
很快确定到,这个就是常驻通知栏刷新的问题。常驻通知栏中构造Notification的时候,默认了一些设置。这在大部分手机上正常,不会有明显的问题,如xiao mi 6, honor 10,oppo A5等。
而在某些手机上会出现问题,比如M1816。具体是这样的,把手机设置为震动,那么打开我们应用的时候,会出现明显的震动,不止一次;把手机设置为响铃,则会出现明显的提示声音。当然,手机静音状态下没有问题。
那就把通知栏的震动 或者 提示音去掉。
1、mBuilder.setSound(null);
这种设置无效,至少在8.0以上的手机无效。
2、mBuilder.setOnlyAlertOnce(true)
这样设置,每次只会提醒一次声音,不会重复提醒。
3、改变通知优先级 (改之前设置的是 IMPORTANCE_DEFAULT )
这样设置,不管手机设置震动,还是响铃,,,我们应用的常驻通知栏都只是默默的显示,不会震动或者有提示音。
在8.0以后,通知栏的使用需要配合NotificationChannel
NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
channelId需要有唯一性。如果是重复的,在通知栏里面就会给覆盖掉。
importance是表示设置通知的优先级:
NotificationManager.IMPORTANCE_NONE 关闭通知
NotificationManager.IMPORTANCE_MIN 开启通知,不会弹出,但没有提示音,状态栏中无显示
NotificationManager.IMPORTANCE_LOW 开启通知,不会弹出,不发出提示音,状态栏中显示
NotificationManager.IMPORTANCE_DEFAULT 开启通知,不会弹出,发出提示音,状态栏中显示
NotificationManager. IMPORTANCE_HIGH 开启通知,会弹出,发出提示音,状态栏中显示
我使用了最后一种方式,问题解决。后续观察,是否会出现其他问题,未完待续.......