Notification


项目需要,今天学习了一下Notification


首先,发送一个状态栏通知必须用到两个类:  NotificationManager 、 Notification。

 NotificationManager :  是状态栏通知的管理类,负责发通知、清楚通知等。

NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取。

使用步骤:

一、创建Notification

   

 int notifyId = 100;//标识每一个通知
		NotificationManager	mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//通知管理者
		NotificationCompat.Builder	mBuilder = new NotificationCompat.Builder(this);//Notification的构造器
		PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), Notification.FLAG_AUTO_CANCEL);//当用户点击通知时要执行的意图
对通知进行配置

mBuilder.setContentTitle("测试标题")
		.setContentText("测试内容")
		.setNumber(1)//显示数量
		.setTicker("测试通知来啦")//通知首次出现在通知栏,带上升动画效果的
		.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示
		.setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
		.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消  
		.setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
		.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:
		//Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
		.setSmallIcon(R.drawable.ic_launcher);
显示通知:

mNotificationManager.notify(notifyId, mBuilder.build());
通过NotificationManager  的  notify(int, Notification) 方法来启动Notification。  第一个参数唯一的标识该Notification,第二个参数就是Notification对象。

二、更新Notification

调用Notification的 setLatestEventInfo方法来更新内容,然后再调用NotificationManager的notify()方法即可。(具体可以看下面的实例)

 

三、删除Notification

通过NotificationManager  的cancel(int)方法,来清除某个通知。其中参数就是Notification的唯一标识ID。

当然也可以通过  cancelAll() 来清除状态栏所有的通知。

 

四、Notification设置(振动、铃声等)

补充:更新,移除通知

  在使用NotificationManager.notify()发送通知的时候,需要传递一个标识符,用于唯一标识这个通知。对于有些场景,并不是无限的添加新的通知,有时候需要更新原有通知的信息,这个时候可以重写构建Notification,而使用与之前通知相同标识符来发送通知,这个时候旧的通知就被被新的通知所取代,起到更新通知的效果。
   对于一个通知,当展示在状态栏之后,但是使用过后,如何取消呢?Android为我们提供两种方式移除通知,一种是Notification自己维护,使用setAutoCancel()方法设置是否维护,传递一个boolean类型的数据。另外一种方式使用NotificationManager通知管理器对象来维护,它通过notify()发送通知的时候,指定的通知标识Id来操作通知,可以使用cancel(int)来移除一个指定的通知,也可以使用cancelAll()移除所有的通知。


案例

/** Notification管理 */
		NotificationManager mNotificationManager;
		
		NotificationCompat.Builder mBuilder;
		
		int notifyId = 100;
		/** 
		 * 初始化通知栏
		 *  */
		mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		mBuilder = new NotificationCompat.Builder(this);
		PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), Notification.FLAG_AUTO_CANCEL);
		mBuilder.setContentTitle("测试标题")
		.setContentText("测试内容")

		//				.setNumber(number)//显示数量
		.setTicker("测试通知来啦")//通知首次出现在通知栏,带上升动画效果的
		.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示
		.setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
		//				.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消  
		.setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
		.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:
		//Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
		.setSmallIcon(R.drawable.ic_launcher);
		/**
		 * 显示通知栏
		 */
		mBuilder.setContentTitle("测试标题")
		.setContentText("测试内容")
		//				.setNumber(number)//显示数量
		.setTicker("测试通知来啦");//通知首次出现在通知栏,带上升动画效果的
		mNotificationManager.notify(notifyId, mBuilder.build());
		//		mNotification.notify(getResources().getString(R.string.app_name), notiId, mBuilder.build());



下面是几种常见通知的使用方法》关键代码:

注意需要用到权限的时候不要忘记在配置文件中声明权限,比如震动权限等

private static final int NOTIFICATION_FLAG = 1;
......此处省略
	public void notificationMethod(View view) {
		
		NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		switch (view.getId()) {
		// 默认通知
		case R.id.btn1:
			// 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条出发的activity,所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity
			PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
					new Intent(this, MainActivity.class), 0);
			// 下面需兼容Android 2.x版本是的处理方式
			// Notification notify1 = new Notification(R.drawable.message,
			// "TickerText:" + "您有新短消息,请注意查收!", System.currentTimeMillis());
			Notification notify1 = new Notification();
			notify1.icon = R.drawable.ic_launcher;
			notify1.tickerText = "TickerText:您有新短消息,请注意查收!";
			notify1.when = System.currentTimeMillis();
			notify1.setLatestEventInfo(this, "Notification Title",
					"This is the notification message", pendingIntent);
			notify1.number = 1;
			notify1.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
			// 通过通知管理器来发起通知。如果id不同,则每click,在statu那里增加一个提示
			manager.notify(NOTIFICATION_FLAG, notify1);
			break;
			// 默认通知 API11及之后可用
		case R.id.btn2:
			PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,
					new Intent(this, MainActivity.class), 0);
			// 通过Notification.Builder来创建通知,注意API Level
			// API11之后才支持
			Notification notify2 = new Notification.Builder(this)
			.setSmallIcon(R.drawable.ic_launcher) // 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap
			// icon)
			.setTicker("TickerText:" + "您有新短消息,请注意查收!")// 设置在status
			// bar上显示的提示文字
			.setContentTitle("Notification Title")// 设置在下拉status
			// bar后Activity,本例子中的NotififyMessage的TextView中显示的标题
			.setContentText("This is the notification message")// TextView中显示的详细内容
			.setContentIntent(pendingIntent2) // 关联PendingIntent
			.setNumber(1) // 在TextView的右方显示的数字,可放大图片看,在最右侧。这个number同时也起到一个序列号的左右,如果多个触发多个通知(同一ID),可以指定显示哪一个。
			.getNotification(); // 需要注意build()是在API level
			// 16及之后增加的,在API11中可以使用getNotificatin()来代替
			notify2.flags |= Notification.FLAG_AUTO_CANCEL;
			manager.notify(NOTIFICATION_FLAG, notify2);
			break;
			// 默认通知 API16及之后可用
		case R.id.btn3:
			PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,
					new Intent(this, MainActivity.class), 0);
			// 通过Notification.Builder来创建通知,注意API Level
			// API16之后才支持
			Notification notify3 = new Notification.Builder(this)
			.setSmallIcon(R.drawable.ic_launcher)
			.setTicker("TickerText:" + "您有新短消息,请注意查收!")
			.setContentTitle("Notification Title")
			.setContentText("This is the notification message")
			.setContentIntent(pendingIntent3).setNumber(1).build(); // 需要注意build()是在API
			// level16及之后增加的,API11可以使用getNotificatin()来替代
			notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
			manager.notify(NOTIFICATION_FLAG, notify3);// 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
			break;
			// 自定义通知
		case R.id.btn4:
			// Notification myNotify = new Notification(R.drawable.message,
			// "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis());
			Notification myNotify = new Notification();
			myNotify.icon = R.drawable.ic_launcher;
			myNotify.tickerText = "TickerText:您有新短消息,请注意查收!";
			myNotify.when = System.currentTimeMillis();
			myNotify.flags = Notification.FLAG_NO_CLEAR;// 不能够自动清除
			RemoteViews rv = new RemoteViews(getPackageName(),
					R.layout.mynotification);
			rv.setTextViewText(R.id.text_content, "hello wrold!");
			myNotify.contentView = rv;
			Intent intent = new Intent(Intent.ACTION_MAIN);
			PendingIntent contentIntent = PendingIntent.getActivity(this, 1,
					intent, 1);
			myNotify.contentIntent = contentIntent;
			manager.notify(NOTIFICATION_FLAG, myNotify);
			break;
		case R.id.btn5:
			// 清除id为NOTIFICATION_FLAG的通知
			manager.cancel(NOTIFICATION_FLAG);
			// 清除所有的通知
			// manager.cancelAll();
			break;
		default:
			break;
		}
	}

几种常用的通知效果:

(1)点击跳转

//点击的意图ACTION是跳转到Intent
		Intent resultIntent = new Intent(this, MainActivity.class);
		resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值