Notification的使用
初步认识
这个类能使我们的消息推送到状态栏,并把消息停留在状态栏(如下图)
1.png
然后打开状态栏查看该通知(如下图)
2.png
上面是最简单的通知栏实现方式,我们来实现下:
- 在xml建立一个button,设置点击onClick;
- 在MainActivity里写如点击事件,代码如下:其中这个QQ头像是应用的图标,而图一的绿色图标是我们设置的小图标,在setSmallIcon里设置。
- 素材:第一个epx.png,第二个hmv.png
epx.png
hmv.png
实现最简单的状态栏弹出通知
public class MainActivity extends AppCompatActivity {
//如果是Eclipse,请继承Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
复制粘贴别客气
/**
* 建立一个只有通知,不能实现任何操作的Notification
* @param view
*/
public void notificationButton(View view) {
//获取通知服务对象
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//.Build是构建者模式
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//===============通知窗口的属性设置===============
builder.setSmallIcon(R.mipmap.epx);//设置通知的图标
builder.setTicker("1");//在状态栏跳出时显示的内容
builder.setContentTitle("2");//在下拉条里显示的通知的标题
builder.setContentText("3");//标题下的内容摘要
builder.setDefaults(Notification.DEFAULT_ALL);//设置通知接收时,系统对应的提醒方式,震动,声音等
//把所有设置联合起来,返回一个新的notification
Notification build = builder.build();
notificationManager.notify(1,build);
}
}//end
进阶
点击通知栏跳转到Activity
复制粘贴别客气
/**
* 建立一个点击通知有跳转到界面功能的Notification
* @param view
*/
public void pendingIntentButton(View view) {
//获取通知服务的对象
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//===============通知窗口的属性设置===============
builder.setSmallIcon(R.mipmap.epx);
builder.setTicker("1");//在状态栏跳出时显示的内容
builder.setContentTitle("2");//在下拉条里显示的通知的标题
builder.setContentText("3");//标题下的内容摘要
builder.setDefaults(Notification.DEFAULT_ALL);//设置通知接收时,系统对应的提醒方式,震动,声音等
//创建意图,从哪个Activity跳转到哪个Activity的意图
Intent mIntent = new Intent(this, SecondActivity.class);
//获得一个用于跳转Activity的延迟意图(何时触发该意图不确定,而Intent是即时的)
//一般跳转Activity的时候,我们需要把最后一个参数改为PendingIntent.FLAG_UPDATE_CURRENT,这样在启动的Activity里就可以用接收Intent传送数据的方法正常接收。
PendingIntent activity = PendingIntent.getActivity(this, 1, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//把这个延迟意图塞到通知里
builder.setContentIntent(activity);
//设置当点击通知后,通知是否自动消失
builder.setAutoCancel(true);
//把所有设置联合起来,返回一个新的notification
Notification build = builder.build();
notificationManager.notify(1,build);
}
}//end
实现类似淘宝的大图通知
大图通知.jpg
大图通知之小标题通知.jpg
复制粘贴别客气
/**
* 大图通知
*/
public void notificationBigPictureStyleButton(View view) {
//获得通知管理器
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//===============通知窗口的属性设置===============
//小图滚屏图标必须设置,否则通知将不显示!!!!!!!!!
builder.setSmallIcon(R.mipmap.epx);
//小图的内容可以不写,由大图通知提供内容体,但是,当大图通知出来后,又有多条其他app通知,大图通知将自动转换为小图通知
//当用户点击的时候,大图通知才显示出其要展示的大图,所以如果不设置小图通知的内容,当大图缩小时,通知的标题和内容都为空的
builder.setTicker("我是大图通知");//在状态栏滚屏时显示的内容
builder.setContentTitle("这是大图通知的小图标题");//在下拉条里显示的通知的标题
builder.setContentText("这是大图通知的小图内容");//标题下的内容摘要
builder.setDefaults(Notification.DEFAULT_ALL);
//点击Notification后跳转
Intent mIntent = new Intent(this, SecondActivity.class);
PendingIntent activity = PendingIntent.getActivity(this, 1, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(activity);
//设置当点击通知后,通知是否自动消失
builder.setAutoCancel(true);
//得到大图通知对象
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(builder);
//设置属性,当设置了大图的标题和内容时,,将覆盖小图通知的内容
bigPictureStyle.setBigContentTitle("大图通知标题");
bigPictureStyle.setSummaryText("大图通知内容");
//设置大图通知的图标,将覆盖小图通知的图标,此处可不设置,默认使用APPLogo
//bigPictureStyle.bigLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.hmv));
//设置大图通知,需要展示出来的大图
bigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.big));
//开始通知,notify第一个参数表示消息的编号,若有相同的编号,则后来的消息会覆盖前面的消息
//比如QQ消息会显示最后一条发来的,如果每次发的消息编号都不同,将会使整个状态下拉窗口塞满消息,体验性将非常差
notificationManager.notify(3,bigPictureStyle.build());
}
其实淘宝那个不仅仅是大图通知,还集合了自定义通知
clipboard.png
/**
* 自定义通知
* 自定义通知的内容不能超过系统自设的高度,否则后来的控件会把前面的控件顶出范围,使其不可见
* @param view
*/
public void notificationRemoteButton(View view) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.hmv);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.remoteview_layout);
remoteViews.setTextViewText(R.id.tv_title,"我是自定义标题");
remoteViews.setTextColor(R.id.tv_title, Color.BLUE);
//设置布局里的其他TextView
remoteViews.setTextViewText(R.id.tv_detail1,"自定义内容1");
remoteViews.setTextViewText(R.id.tv_detail2,"自定义内容2");
remoteViews.setTextViewText(R.id.tv_detail3,"自定义内容3");
//设置布局里的图片
builder.setDefaults(Notification.DEFAULT_ALL);
builder.setContent(remoteViews);
notificationManager.notify(4,builder.build());
}```