下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等。
(网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头,随便当作回顾笔记。下面我就通过官方文档、源代码、书上的一些资料汇总下这一块的知识,并通过一个通知栏的汇总DEMO让大家更好的了解这个类的使用,内容有点多,可以根据需求看目录学习)。
Notificaiton状态通知栏:
功能作用
1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等)
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)
思维导图结构
思维导图的大体结构(按照各个节点延伸拓展学习)
Notificaiton -- service -- BroadcastReceiver -- Intent(flag、Action等属性应用) -- PendingIntent
感慨:
一个Notificaiton通知的拓展使用就要涉及与4大组建的配合,所以学好整体的知识体系。
联系:
1.由于service 是在后台运行,所以它意图做什么我们看不到,可以通过Notificaiton 来显示提醒(如音乐的后台播放)。
2.service服务和BroadcastReceiver广播相结合,在加上Notificaiton 显示(如程序的后台更新)。
3.Intent作为意图处理,和Notificaiton的点击时间紧密结合在了一起,并且与BroadcastReceiver和service的联系也紧密不可以分割。
(service 在后台之后通过BroadcastReceiver来通知Notificaiton 显示相关东西,在通过Intent完成用户的意图操作)
代码实现:
package com.example.user.android2lesson14_notification; import android.annotation.TargetApi; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RemoteViews; public class MainActivity extends AppCompatActivity { private Button defaultstyle; private Button cancelButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); defaultstyle= (Button) findViewById(R.id.default_style); defaultstyle.setOnClickListener(new View.OnClickListener() { @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onClick(View view) { 首先需要一个manger NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 创建一个builder用于设置通知属性 Notification.Builder builder=new Notification.Builder(MainActivity.this); 设置builder的属性 设置大图标· Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher); builder.setLargeIcon(bitmap); 设置消息来时的提示 builder.setTicker("baby,来消息了~"); 设置通知标题 builder.setContentTitle("麒麟集团通知"); 设置通知内容 builder.setContentText("今夜我们一起看星星,男生888,女士88,望周知!!"); 设置小图标 builder.setSmallIcon(R.mipmap.ic_launcher); builder.setAutoCancel(true); Intent intent=new Intent(MainActivity.this,SecondActivity.class); 第一个参数:传一个上下文对象 第二个参数:传一个返回的状态码 第三个参数:一个Intent,通常就是跳转的Intent 第四个参数:是通知的更新类型 PendingIntent pendingIntent= PendingIntent.getActivity(MainActivity.this,100,intent,PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); 设置自定义通知~~~~~下午讲 // 1.创建remoteView对象 RemoteViews views=new RemoteViews(getPackageName(),R.layout.notification_layout); // 2.设置remoteView对象的属性 views.setTextViewText(R.id.title,"喜马拉雅"); views.setTextViewText(R.id.text,"姑娘你是条汉子"); 设置自定义通知的点击响应事件 创建一个pendingIntent Intent intent1=new Intent(MainActivity.this,SecondActivity.class); PendingIntent pendingIntent1=PendingIntent.getActivity(MainActivity.this,100,intent1,PendingIntent.FLAG_CANCEL_CURRENT); 设置并关联响应事件 views.setOnClickPendingIntent(R.id.BtnInfo,pendingIntent1); builder.setContent(views);/ 根据builder创建notification Notification notification=builder.build(); 利用manger将通知显示出来 manager.notify(100,notification); manager.notify(101,notification); } }); cancelButton= (Button) findViewById(R.id.cancel_action); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { 1.拿到通知manger NotificationManager manger= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 2.取消所有通知 manger.cancelAll(); 取消指定的通知,根据id号来确定对象 manger.cancel(100); } }); } }