1.在通知栏生成通知
// 创建一个NotificationManager的引用
NotificationManager notificationManager = (NotificationManager)
ac.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
// 定义Notification的各种属性
Notification notification = new Notification(R.drawable.ic_launcher,
"有新消息", System.currentTimeMillis());
//FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
//FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉
//FLAG_ONGOING_EVENT 通知放置在正在运行 6.0系统设置该属性后,无法在通知栏清除该通知
//FLAG_INSISTENT 是否一直进行,比如音乐一直播放,直到用户响应
//FLAG_SHOW_LIGHTS 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用
notification.flags |= Notification.FLAG_AUTO_CANCEL;
//可以设置多个属性,如下
//notification.flags |= Notification.FLAG_SHOW_LIGHTS;
//DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等
//DEFAULT_LIGHTS 使用默认闪光提示
//DEFAULT_SOUNDS 使用默认提示声音
//DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
notification.defaults = Notification.DEFAULT_LIGHTS;
//叠加效果常量
//notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;
notification.ledARGB = Color.BLUE;
notification.ledOnMS = 5000; //闪光时间,毫秒
// 设置通知的事件消息
CharSequence contentTitle = "有新消息"; // 通知栏标题
CharSequence contentText = "恭喜您,开门成功!"; // 通知栏内容
//如果需要跳转到指定的Activity,则需要设置PendingIntent
Intent notificationIntent = new Intent(ac, HostActivity.class);
//给指定的activity传递通知Id,方便activity消除该通知
notificationIntent.putExtra("notificationId", 1111);
// FLAG_UPDATE_CURRENT 更新数据,如果有多个PendingIntent,且requestCode相同,则会 替换为最新extra数据
//如果需要通过不同的extra数据,进行处理,就需要requestCode不相同
int requestCode = new Random().nextInt();
PendingIntent contentItent = PendingIntent.getActivity(ac, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(ac, contentTitle, contentText, contentItent);
// 把Notification传递给NotificationManager
notificationManager.notify(1111, notification); //将通知加入状态栏,标记为id
2.在Activity中关闭通知
public void onResume() {
super.onResume();
int notificationId = getIntent().getIntExtra("notificationId", 123);
if (notificationId != 123) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//移除标记为id的通知 (只是针对当前Context下的所有Notification)
notificationManager.cancel(notificationId);
//移除所有通知
//notificationManager.cancelAll();
}
}