如何调用notification在状态栏显示提醒,点击后弹出指定的activity并避免重复实例

          没什么好说的,直接上代码

	/***
	 * 取消通知
	 * @param cx
	 * @param notifyID
	 */
	static public void stopNotifycation(Context cx,int notifyID){
		NotificationManager nm = (NotificationManager) cx
		        .getSystemService(Context.NOTIFICATION_SERVICE);
		nm.cancel(notifyID);
	}
	/***
	 * 顯示通知
	 * @param notifyID
	 * @param cx
	 * @param tickerText
	 * @param contentTitle
	 * @param content
	 * @param contentInfo
	 * @param IconResID
	 * @param counter
	 * @param autoCancel
	 * @param playSound
	 * @param vibrate
	 * @param launchIntent
	 */
	static public void  showNotifycation(int notifyID,Context cx,String tickerText,
			String contentTitle,String content,String contentInfo,
			int IconResID,
			int counter,boolean autoCancel,boolean playSound,boolean vibrate,Intent launchIntent){
		AudioManager volMgr = (AudioManager) cx.getSystemService(Context.AUDIO_SERVICE);
		boolean w_silent_mode=volMgr.getRingerMode()== AudioManager.RINGER_MODE_SILENT;
		Notification.Builder builder=new Notification.Builder(cx);
		builder.setSmallIcon(IconResID).setTicker(tickerText).setWhen(System.currentTimeMillis())
		.setDefaults((playSound&&!w_silent_mode?Notification.DEFAULT_SOUND:0)|
				(vibrate&&!w_silent_mode?Notification.DEFAULT_VIBRATE:0))
		.setAutoCancel(autoCancel);		
		if (launchIntent!=null){
			PendingIntent pi=PendingIntent.getActivity(cx, 0, launchIntent, 0);			
			builder.setContentIntent(pi);
		}
		if (playSound){
			builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
		}
		if (!fillNullStr(contentTitle).equals("")){
			builder.setContentTitle(contentTitle);
		}
		if (!fillNullStr(content).equals("")){
			builder.setContentText(content);
		}
		if (!fillNullStr(contentInfo).equals("")){
			builder.setContentInfo(contentInfo);
		}		
		Notification w_ret= builder.build();
		if (counter>1){
			w_ret.number=counter;
		}
		NotificationManager nm = (NotificationManager) cx
		        .getSystemService(Context.NOTIFICATION_SERVICE);
		nm.notify(notifyID,w_ret);		
	}


上面一个是停止显示通知,在mainactivity.ondestory时执行,一个是显示通知,tickerText参数是在通知显示初期状态栏上显示两秒钟的提示信息,contentTitle是下拉通知栏看明细时此条通知的标题,content是明细内容,contentInfo是额外的小提示,一般给null,launchIntent则是一个启动activity的intent,一般用Intent mint = new Intent(context, activity.class)方式产生。


       问题来了,默认情况下,点击了通知栏,会弹出一个新的activity实例,尽管此activity在task里面已经有一个实例,我发现天天动听也有这个问题,不知道新版本修复了没。

这不科学,后来查资料,在Manifest.xml里面把此activity的android:launchMode设为singleTop就搞定了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值