美文网首页Android问题汇总(遥远的回忆过去)Android收藏集
Android 8.0后notification通知声音无法关闭

Android 8.0后notification通知声音无法关闭

作者: MonkeyLei | 来源:发表于2019-08-07 09:09 被阅读10次

其实主要就是关于NotificationChannel的用法。这是Build.VERSION_CODES.O之后新增的方式,主要用来设置通知的相关属性,单独提取出来设置的一个工具类吧。

之前也是采用了网上的一些设置方法关闭声音,发现只要通知进度更新就会响,导致每次更新进度都会不停的响。但是有些机型由没事,有些系统也是8.0,之前都没想,后面又开始想了,没太具体去研究。 截止2018.10.22的时候综合了一些个解决方案,算是解决了,所以先记录下:

DownLoadIntentService.java部分代码(创建通知栏),里面有一些额外的设置我注释掉了,暂时没用(另外关于setDefaults不能控制响铃一次,具体的我觉得可以细细品味官方和相关资料):

            notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel mChannel = new NotificationChannel(InfoChannel, InfoChannel, NotificationManager.IMPORTANCE_HIGH);
                //  mChannel.setDescription(description);
                //  mChannel.enableLights(true);
                //  mChannel.setLightColor(Color.RED);
                //  mChannel.enableVibration(true);
                //  mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                mChannel.setSound(null, null);
                mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
                notificationManager.createNotificationChannel(mChannel);
                builder = new NotificationCompat.Builder(this, InfoChannel);
            } else {
                builder = new NotificationCompat.Builder(this);
            }
            builder.setSmallIcon(R.drawable.notification)
                    .setWhen(System.currentTimeMillis())
                    .setContentTitle("小皮球APP")
                    .setAutoCancel(true)
                    .setContentText("版本更新");
            ///< 仅仅响一次
            builder.setOnlyAlertOnce(true);
            //builder.setDefaults(NotificationCompat.FLAG_ONLY_ALERT_ONCE);
            notificationManager.notify(0, builder.build());

进度更新部分:

            int progresss = (int) Math.round(progress / (double) total * 100);
            builder.setContentInfo(String.valueOf(progress) + "%").setProgress(100, progresss, false);
            notificationManager.notify(0, builder.build());
            if (progresss == 100) {
                notificationManager.cancel(0);
            }

取消状态栏:

@Override
public void onDestroy() {
super.onDestroy();
if (null != notificationManager) {
notificationManager.cancel(0);
}
}
Then, 而在Android中,如果需要访问硬件设备的话,是需要对其进行授权的,所以需要在清单文件AndroidManifest.xml中增加两个授权,分别授予访问振动器与闪光灯的权限:


<uses-permission android:name="android.permission.FLASHLIGHT"/>

<uses-permission android:name="android.permission.VIBRATE"/>

大概记录下吧。具体的可以专门学习这个知识哟!

相关文章

网友评论

    本文标题:Android 8.0后notification通知声音无法关闭

    本文链接:https://www.haomeiwen.com/subject/vjyndctx.html