1.在服务中,发送通知的方法
private void sendNotification(String title,String content,StateBean stateBean){
Context context=getApplicationContext();
String channelId = "通知消息";//和application通道的channedId名字要一样
//设置TaskStackBuilder,点击通知栏跳转到指定页面,点击返回。返回到的页面
// Intent returnIntent = new Intent(this, HomeActivity.class);
// TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// stackBuilder.addParentStack(NotificationIntent.class);
// stackBuilder.addNextIntent(returnIntent);
//设置点击状态栏跳转的地方,详情页
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("bean",stateBean);
//解决PendingIntent的extra数据不准确问题
//注意下面的最后一个参数用PendingIntent.FLAG_UPDATE_CURRENT,否则传参有问题
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//通知管理类
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//设置通知属性,创建通知build,(创建channel通道已经在MApplication里面声明了)
//使用默认的震动
Notification notification = new NotificationCompat.Builder(context,channelId)
.setContentTitle(title)//设置标题
.setContentText(content)//消息内容
.setWhen(System.currentTimeMillis())//发送时间
.setSmallIcon(R.mipmap.logo) //设置图标
.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE)//设置默认的提示音,振动方式,灯光
.setContentIntent(pendingIntent)//传值跳转的内容
.setAutoCancel(true)//点击通知时是否自动消失,需要重点注意的是,setAutoCancel需要和setContentIntent一起使用,否则无效。
// .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.app_icon))
// .setFullScreenIntent(pendingIntent,true)//悬挂式通知栏。但是在oppo8.0试了。通知会自动跳到intent的页面。网上说sdk设为29就没事了。android10.0测了不会自己跳转
.build();
notification.defaults = Notification.DEFAULT_ALL ;//设置为默认的声音
//发送通知
manager.notify(123, notification);
}
2.要在MApplication中创建发送通知的通道
/**
* 创建通道
*/
private void createChannel(){
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 通知渠道的id
String channelId = "通知消息";
// 用户可以看到的通知渠道的名字.
CharSequence name = "通知消息的通道";
// 用户可以看到的通知渠道的描述
// String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = null;
//Android8.0要求设置通知渠道
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
channel = new NotificationChannel(channelId,name, NotificationManager.IMPORTANCE_HIGH);
// 配置通知渠道的属性
// mChannel.setDescription(description);
// 设置通知出现时的闪灯(如果 android 设备支持的话)
channel.enableLights(true);
channel.setLightColor(Color.RED);
// 设置通知出现时的震动(如果 android 设备支持的话)
channel.enableVibration(true);
channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
//最后在notificationmanager中创建该通知渠道
mNotificationManager.createNotificationChannel(channel);
}
}
注:发送通知的ChannelId要和 MApplication创建的通道ChannelId 要一样。