1.Notification创建
首先,介绍一下,创建一个通知所需要用到的类和方法
NotificationManager类
NotificationManager类是用来管理系统的所有通知的类,该类的对象必须通过Context类的getSystemService()方法获取。完整代码:
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notify()作用是告知系统显示该通知,有notify (int id, Notification notification)和notify (String tag,int id, Notification
notification),id表示通知的id,tag表示通知的标志,主要用于区分各个通知,notification指的是通知对象;
cancel(int id) 表示移除指定id的通知,cancel(String tag,int id)移除指定Id和tag的通知,cancelAll()移除所有通知。
Notification类
notification有一些常用的属性:
icon 设置通知图标(在API23后使用setSmallIcon(Icon)替代)
number 通知所显示的事件数量,例如,收到邮件通知,则指的是邮件未读数量(这是用API11创建的通知所表现的作用)。如果通知是用Notification.builder创建,则number表示扩展通知视图,为0或者负数的时候,通知不显示。
tickerText 通知显示在通知栏的文本,只在通知栏上显示一次。
when 系统当前时间
flags 取值有:
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
defaults 设置默认值
DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等
DEFAULT_LIGHTS 使用默认闪光提示
DEFAULT_SOUND 使用默认提示声音
DEFAULT_VIBRATE 使用默认手机震动
contentView 拉下通知栏后,通知条显示视图,类型是RemoteView;
contentIntent 点击通知条控件时,响应的意图
一些常用的方法
构造方法:
public Notification (int icon, CharSequence tickerText, long when),如果使用属性的方式设置这些值,那也可以使用无参构造函数
在API11之后使用Notification.builder()创建
setLatestEventInfo(Context context,CharSequence title, CharSequence content, PendingIntent intent);
本方法用于显示通知栏下拉后,通知条的内容。
PendingIntent类
PendingIntent这个类用于处理即将发生的事情。
该对象的获取方式为, PendingIntent.getActivity(Context context,int requestCode,Intent intent,int flags);requsetCode和flags一般默认设置为0;
下面用上面提到的知识,写一个简单的通知(基于API11之前):
public void showBaseNotification() {NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);Notification notify = new Notification();notify.icon = R.drawable.ic_launcher;notify.tickerText = "您有新短消息,请注意查收!";notify.when = System.currentTimeMillis();PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,new Intent(this, MainActivity.class), 0);notify.setLatestEventInfo(this, "Notification Title","This is the notification message", pendingIntent);notify.number = 1;notify.flags |= Notification.FLAG_AUTO_CANCEL; // 通过通知管理器来发起通知。如果id不同,则每click,在statu那里增加一个提示manager.notify(1, notify);}
基于API11之后:
public void showNotification() {NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);NotificationCompat.Builder nb = new NotificationCompat.Builder(getApplicationContext()).setContentIntent(PendingIntent.getActivity(MainActivity.this, 0,new Intent(this, MainActivity.class),PendingIntent.FLAG_UPDATE_CURRENT)).setAutoCancel(true).setContentTitle("test title").setContentText("message").setSmallIcon(R.drawable.ic_launcher).setLights(Color.RED, 600, 1000).setVibrate(new long[] { 0, 200, 300, 500 }).setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));manager.notify(1, nb.build());}