前言
现在很多android项目都会用到service ,但是安卓8.0以后官方要求使用service时必须在其内部调用startForeground(id,Notification);方法否则会报ANR。该方法内需要一个Notification参数,如果不对它的参数进行设置,会有弹窗和声音。
我现在做的一个项目就是要求取消Notification的弹窗和声音,因为Notification的弹窗和声音对用户体验有影响。下面说说取消弹窗和声音的方法。
解决办法
最重要的就是NotificationManager.IMPORTANCE_MIN这句代码。意思是重要性最低即为沉默。
以下为全部代码部分:
String CHANNEL_ONE_ID = "com.test.product";
String CHANNEL_ONE_NAME = "Channel One";
NotificationChannel notificationChannel = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
notificationChannel = new NotificationChannel(CHANNEL_ONE_ID,CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_MIN);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ONE_ID);
Notification notification = builder
.setTicker("service服务")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("service服务")
.setContentText(message)
.setContentInfo("")
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.build();
NotificationManager notificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
startForeground(1, notification);
notificationManager.notify(1, notification);