首页 > 代码库 > Android 状态栏通知Notification、NotificationManager简介

Android 状态栏通知Notification、NotificationManager简介

  Notification(通知)一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个通知;

  在Android系统中,发一个状态栏通知还是很方便的。发送一个状态栏通知必须用到两个类:  NotificationManager 、 Notification;

  NotificationManager :  是状态栏通知的管理类,负责发通知、清楚通知等;NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取;

  Notification:是具体的状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数;

 

我们先看下一个通知需要的基本参数:

(1)Icon:图标;

(2)PendingIntent:点击通知执行页面跳转;

(2)Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动;

(3)Content Title:Notification展开后的标题;
(4)Content Text:Notification展开后的内容;

 

而一个通知通常需要以下几步:

(1)获取NotificationManager:

nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

 

(2)实例化Notification对象,并设置Notification的属性;

notification.icon = R.drawable.icon;  // 设置通知在状态栏显示的图标                notification.tickerText = "One Message is coming!!!";  // 通知在状态栏显示的内容notification.when = when;    // 设置来通知时的时间notification.sound = Uri.parse("android.resource://com.sun.alex/raw/dida"); // 自定义声音notification.flags |= Notification.FLAG_AUTO_CANCEL;  // 点击清除按钮或点击通知后会自动消失  notification.flags |= Notification.FLAG_INSISTENT;   // 一直进行,比如音乐一直播放,知道用户响应  notification.defaults = Notification.DEFAULT_SOUND;   // 调用系统自带声音  notification.defaults = Notification.DEFAULT_VIBRATE;  // 设置默认震动  notification.defaults = Notification.DEFAULT_ALL;   // 设置铃声震动  notification.defaults = Notification.DEFAULT_ALL;   // 把所有的属性设置成默认  

 

(3)调用setLatestEventInfo()方法在视图中设置图标和时间;

// 实例化IntentIntent intent = new Intent(MainActivity.this, MainActivity.class);// 获得PendingIntentPendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0,intent, 0);// 设置事件信息notification.setLatestEventInfo(MainActivity.this, " Title", "Content",pIntent);

 

(4)发出通知:通过NotificationManager对象的notify()方法来执行一个Notification的消息;

private int Notification_ID = 110;nManager.notify(Notification_ID, notification);

 

(5)清除通知:通过NotificationManager的cancel(int)方法,来清除某个通知,其中参数是Notification的唯一标识ID,当然也可以通过cancelAll()来清除状态栏所有的通知;

nManager.cancel(Notification_ID);

 

下面用例子来说明一下:

三个按钮,分别是发送,然后更新,最后清除通知;

第一步,点击发送后;

 

然后查看通知:

第二步,点击更新通知,然后查看通知:

 

 

第三步:清除通知:

 

 

实现代码如下:

布局文件activity_main.xml 只有三个按钮,就不写了;

主要看MainActivity.java

package com.xiaozhang.notificationtest;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {    private Button button1, button2, button3;    // 通知管理器    private NotificationManager nManager;    // 通知显示内容    private PendingIntent pendingIntent;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        button1 = (Button) findViewById(R.id.button1);        button2 = (Button) findViewById(R.id.button2);        button3 = (Button) findViewById(R.id.button3);        button1.setOnClickListener(onclick);        button2.setOnClickListener(onclick);        button3.setOnClickListener(onclick);        nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);        Intent intent = new Intent(this, MainActivity.class);        pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent,                0);    }    OnClickListener onclick = new OnClickListener() {        private int Notification_ID = 110;        private Notification notification;        @SuppressWarnings("deprecation")        @Override        public void onClick(View v) {            switch (v.getId()) {            case R.id.button1:                notification = new Notification();                notification.icon = R.drawable.icon; // 设置通知在状态栏显示的图标                notification.tickerText = "One Message is coming!!!"; // 通知在状态栏显示的内容                // 如果要全部采用默认值, 用 DEFAULT_ALL.                // 此处采用默认声音                notification.defaults |= Notification.DEFAULT_SOUND;                notification.defaults |= Notification.DEFAULT_VIBRATE;                notification.defaults |= Notification.DEFAULT_LIGHTS;                // 让声音、振动无限循环,直到用户响应                notification.flags |= Notification.FLAG_INSISTENT;                // 通知被点击后,自动消失                notification.flags |= Notification.FLAG_AUTO_CANCEL;                // 第二个参数 :下拉状态栏时显示的消息标题                // 第三个参数:下拉状态栏时显示的消息内容                // 第四个参数:点击该通知时执行页面跳转                notification.setLatestEventInfo(MainActivity.this, "通知1",                        "第一条信息:one message", pendingIntent);                // 发出状态栏通知                nManager.notify(Notification_ID, notification);                break;            case R.id.button2:                // 更新通知                // 比如状态栏提示有一条新短信,还没来得及查看,又来一条新短信的提示;此时可以采用更新原来通知的方式。                // (再重新发一个通知也可以,但是这样会造成通知的混乱,而且显示多个通知给用户,对用户也不友好)                notification.setLatestEventInfo(MainActivity.this, "通知2",                        "第二条消息:second message", pendingIntent);                nManager.notify(Notification_ID, notification);                break;            case R.id.button3:                nManager.cancel(Notification_ID);                break;            }        }    };}

 

Android 状态栏通知Notification、NotificationManager简介