功能简介:
在 Android 手机界面最上方有一条显示时间,信号强度和电池状态等信息的区域,这是 Android 手机的状态通知栏。当系统有一些重要的信息要通知手机用户时,例如收到新短信,或者是收到新邮件,或者是有未接电话等等,系统通常会把信息显示在状态栏中,有的仅显示小图片,有的则显示文字和小图片,用手指按住状态栏往下拉,还可以展开状态栏,查看所有系统发出的信息。
而在 Android 中有提醒功能的也可以用 Dialog,但是我们要慎重的使用,因为当使用 AlertDialog 的时候,用户正在进行的操作将会被停止。当用户打游戏的时候,来了一条短信。用户必须先去处理这条提醒,才能继续游戏,显得有点麻烦。而使用 Notification 就不会带来这些麻烦事。所以在开发中应根据实际需求,选择合适的控件。 Notification 可以在屏幕最顶部的状态栏上显示一个图标通知,通知的同时可以播放声音,以及振动来提示用户,点击通知还可以进入指定的 Activity 。
介绍及使用方法
获取实例:
NotificationManager nm = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
公共方法:
Cancel(int id)
Cancel(String tag, int id)
状态栏提醒必须设置的三个方面
·提示图标,提醒的标题和提醒的内容文本,PendingIntent
状态栏提醒的可选设置
·提醒文本( ticker-text ),声音提醒,振动提醒,灯光闪烁
·提示图标,提醒的标题和提醒的内容文本,PendingIntent
状态栏提醒的可选设置
·提醒文本( ticker-text ),声音提醒,振动提醒,灯光闪烁
notification的使用步骤
1、获取NotificationManager:
2、定义一个Notification:
3、设置 Notification 的各种属性:
1、获取NotificationManager:
NotificationManager m_NotificationManager =
(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
2、定义一个Notification:
Notification m_Notification = new Notification();
3、设置 Notification 的各种属性:
//设置通知在状态栏显示的图标
m_Notification.icon = R.drawable.icon;
//当我们点击通知时显示的内容
m_Notification.tickerText = "Button1 通知内容.....";
//通知时发出的默认声音
m_Notification.defaults = Notification.DEFAULT_SOUND;
//设置通知显示的参数
Intent m_Intent = new Intent(this, DesActivity.class);
PendingIntent m_PIntent = PendingIntent.getActivity(NotificationDemo.this, 0, m_Intent, 0);
m_Notification.setLatestEventInfo(this, "Button1", "Button1通知", m_PIntent );
//这个可以理解为开始执行这个通知
m_NotificationManager.notify(0, m_Notification);
4、既然可以增加同样我们也可以删除,当然是只是删除你自己增加的。
m_NotificationManager.cancel(0); //这里的0是一个ID号码,和notify第一个参数0一样
提醒的更新
每一个提醒都对应有一个唯一标识符ID,在发布提醒时指定的:
NotificationManager.notify(ID, notification)
在更新提醒的时候,只需要在修改Notification的一些属性之后,再调用其setLatestEventInfo(),然后重新发送一次通知即可。
每一个提醒都对应有一个唯一标识符ID,在发布提醒时指定的:
NotificationManager.notify(ID, notification)
在更新提醒的时候,只需要在修改Notification的一些属性之后,再调用其setLatestEventInfo(),然后重新发送一次通知即可。
Notification丰富的提示方式
a) tickerText :显示文本提示
notification.tickerText = "hello";
b) sound :发出提示音
notification.defaults |= Notification.DEFAULT_SOUND;
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
c) vibrate :手机振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;
d) ledARGB 、ledOnMS 、ledOffMS :LED灯闪烁
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
notification.ledOffMS = 1000;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
在使用notification的时候,我们可以方便的使用系统提供的方法去实现一个状态栏,但是有个问题就是状态栏只能一行显示所有的提示内容,如果提示内容超出宽度,那么后边的文字就会显示不全。这里介绍一个自定义的状态栏下拉视图,具体的方法如下:
Notification notification = new Notification();
notification.icon = R.drawable.icon;
notification.tickerText = "Custom!";
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, "Hello, this message is in a custom expanded view");
notification.contentView = contentView;
//使用自定义下拉视图时,不需要再调用setLatestEventInfo()方法
//但是必须定义 contentIntent
notification.contentIntent = pd; //pd即PendingIntent
nm.notify(3, notification);
最新特性:
在android3.0之后,Android的通知与之前的版本有所区别。为了更好的使用,androidSDK引入了Android.app.Notificition.Builder这个类
NotificationManager nm = (NotificationManager) MainActivity.this .getSystemService(NOTIFICATION_SERVICE);
Resources res = MainActivity.this.getResources();
builder = new Notification.Builder(MainActivity.this);
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.ic_launcher)//设置状态栏里面的图标(小图标)
.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.i5))//下拉下拉列表里面的图标(大图标)
.setTicker("this is bitch!") //设置状态栏的显示的信息
.setWhen(System.currentTimeMillis())//设置时间发生时间
.setAutoCancel(true)//设置可以清除
.setContentTitle("This is ContentTitle")//设置下拉列表里的标题
.setContentText("this is ContentText");//设置上下文内容
n = builder.getNotification();//获取一个Notification
n.defaults =Notification.DEFAULT_SOUND;//设置为默认的声音
nm.notify(NOTIFICATION_BASE_NUMBER, n);//显示通知 break;