没什么好说的,直接上代码
/***
* 取消通知
* @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就搞定了。