Notification
NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。
总结了下面几个通知:
上代码:
最基本的通知
/**
* 最基本的通知
*
*/
private void sendNotification() {
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//设置小图标
.setSmallIcon(R.mipmap.rivers)
//设置通知标题
.setContentTitle("最简单的Notification")
.setContentText("只有小图标、标题、内容");
//设置通知时间,默认为系统发出通知的时间,通常不用设置
//.setWhen(System.currentTimeMillis());
//通过builder.build()方法生成Notification对象,并发送通知,id=1
notifyManager.notify(1, builder.build());
}
bigtext风格的通知
bigtext 说白了就是长文字的提醒。但是在4.0 和5.0上显示的效果不同呢。刚开始都是显示的title,4.0的系统呢得手动滑动才能出来,5.0的系统初次会有一个是否接受通知的提醒,点击了允许之后才会显示出bittext
/**bigtext风格的通知
*
*/
private void sendNotification() {
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//设置小图标
.setSmallIcon(R.mipmap.rivers)
//设置通知标题
.setContentTitle("最简单的Notification")
.setStyle(new NotificationCompat.BigTextStyle()
.bigText("bigview 的显示,北海市位于广西北部湾畔,是国家历史文化名城。这里面向东南亚,背靠大西南,是西南出海大通道的重要出海口。"))
//设置通知内容
.setContentText("只有小图标、标题、内容");
//设置通知时间,默认为系统发出通知的时间,通常不用设置
//.setWhen(System.currentTimeMillis());
//通过builder.build()方法生成Notification对象,并发送通知,id=1
notifyManager.notify(1, builder.build());
}
带图片的的通知
/**
*
*/
private void sendNotificationWithPictureStyle() {
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//设置小图标
.setSmallIcon(R.mipmap.rivers)
//设置通知标题
.setContentTitle("带图片的Notification")
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.pic1)))
// .setStyle(new NotificationCompat.BigTextStyle(.bigText("bigview 的显示,北海市位于广西北部湾畔,是国家历史文化名城。这里面向东南亚,背靠大西南,是西南出海大通道的重要出海口。"))
//设置通知内容
.setContentText("有小图标、标题、内容");
//设置通知时间,默认为系统发出通知的时间,通常不用设置
//.setWhen(System.currentTimeMillis());
//通过builder.build()方法生成Notification对象,并发送通知,id=1
notifyManager.notify(2, builder.build());
}
inbox的的通知
/**
*
*/
private void sendNotificationWithInbox() {
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//设置小图标
.setSmallIcon(R.mipmap.rivers)
//设置通知标题
.setContentTitle("inboxStyle Notification")
.setStyle(
new NotificationCompat.InboxStyle()
.addLine("第一行,第一行,第一行,第一行,第一行,第一行,第一行")
.addLine("第二行")
.addLine("第三行")
.addLine("第四行")
.addLine("第五行")
.setSummaryText("SummaryText"))
//设置通知内容
.setContentText("有小图标、标题、内容");
//设置通知时间,默认为系统发出通知的时间,通常不用设置
//.setWhen(System.currentTimeMillis());
//通过builder.build()方法生成Notification对象,并发送通知,id=1
notifyManager.notify(3, builder.build());
发送一个点击跳转到indexActivity的消息
/**
* 发送一个点击跳转到indexActivity的消息
*/
private void sendSimplestNotificationWithAction() {
//获取PendingIntent
Intent mainIntent = new Intent(this, indexPopActivity_.class);
PendingIntent mainPendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//创建 Notification.Builder 对象
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.fish)
//点击通知后自动清除
.setAutoCancel(true)
.setContentTitle("我是带Action的Notification")
.setContentText("点我会打开indexActivity")
.setContentIntent(mainPendingIntent)
// 点击之后通知消失
.setAutoCancel(true);
//发送通知
notifyManager.notify(4, builder.build());
}
自定义view的通知
private void sendNotificationWithCustomView(){
//miniSdk>24
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification);
contentView.setTextViewText(R.id.textView2, "show me 我是自定义的view");
contentView.setTextViewText(R.id.button, "按钮");
contentView.setTextViewText(R.id.btn2, "按钮2");
Notification.Builder builder = new Notification.Builder(this)
.setContent(contentView)
.setSmallIcon(R.mipmap.fish);
//发送通知
notifyManager.notify(5, builder.build());
}
横幅通知 悬浮的样子
此种效果只在5.0以上系统中有效
mainfest中需要添加、
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
/**
* 横幅通知 悬浮的样子
*/
private void sendNotificationWithFull(){
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("横幅通知");
builder.setContentText("请在设置通知管理中开启消息横幅提醒权限");
builder.setDefaults(NotificationCompat.DEFAULT_ALL);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.fish));
Intent intent = new Intent(this,indexPopActivity_.class);
PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0);
builder.setContentIntent(pIntent);
//这句是重点
builder.setFullScreenIntent(pIntent,true);
builder.setAutoCancel(true);
Notification notification = builder.build();
notifyManager.notify(6,notification);
}