添加Notification的基本步骤一般是:配置Notification.Builder->获取状态栏通知管理->NotificationManager->绑定Notification,发送通知请求。
要使得APP能在Android8.0中显示通知,需要进行版本判断,然后给builder设置Channel:
//判断是否是8.0Android.O
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel chan1 = new NotificationChannel("static", "Primary Channel", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(chan1);
builder = new NotificationCompat.Builder(context, "static");
} else {
builder = new NotificationCompat.Builder(context);
}
同时发送静态广播(sendBroadcast
)之前要设置Component:
intentBroadcast.setComponent(new ComponentName(getPackageName(), getPackageName() + ".xxxReceiver"));
具体代码为:
private void sendStaticBroadcast() {
Intent intentBroadcast = new Intent(STATICACTION);
intentBroadcast.setComponent(new ComponentName(getPackageName(), getPackageName() + ".StaticReceiver"));
sendBroadcast(intentBroadcast);
}
public class StaticReceiver extends BroadcastReceiver {
public static final String STATICACTION = "com.example.xxx.xxx.MyStaticFilter";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(STATICACTION)){
//获取状态通知栏管理
NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder;
//判断是否是8.0Android.O
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel chan1 = new NotificationChannel("static",
"Primary Channel", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(chan1);
builder = new NotificationCompat.Builder(context, "static");
} else {
builder = new NotificationCompat.Builder(context);
}
//对builder进行配置
builder.setContentTitle("xxx") //设置通知栏标题
.setContentText("xxx") //设置通知栏显示内容
.setPriority(NotificationCompat.PRIORITY_MAX) //设置通知优先级
.setSmallIcon(R.mipmap.empty_star)
.setDefaults(DEFAULT_ALL)
.setAutoCancel(true); //设置这个标志当用户单击面板就可以将通知取消
//绑定intent,点击图标能够进入某activity
Intent mIntent=new Intent(context, DetailActivity.class);
mIntent.putExtras(bundle);
PendingIntent mPendingIntent=PendingIntent.getActivity(context, 0, mIntent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(mPendingIntent);
//绑定Notification,发送通知请求
manager.notify(0, builder.build());
}
}
}
//NotificationCompat.Builder builder
builder.setPriority(NotificationCompat.PRIORITY_MAX)
builder.setDefaults(DEFAULT_ALL)
NotificationChannel chan1 = new NotificationChannel("dynamic", "Primary Channel", NotificationManager.IMPORTANCE_HIGH);
有时候我们会发现在使用PendingIntent.getActivity(context, 0, intent, 0);
时,尽管把不同的intent值赋值进去了,但是之后点击通知发现intent值并没有改变,还是原来的值。
这与getActivity(Context context, int requestCode, Intent intent, int flags)
函数的第4个参数有关,需要修改成:
PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);