Android中通知的使用-----Notification详解
Android中通知的使用-----Notification详解
Notification —— 通知,是一种让你的应用程序在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。 Notification 是由NotificationManager(系统服务)统一管理的。
一般来说, 一个Notification应该传送的消息包括:
1 、一个状态条图标
2、在拉伸的状态栏窗口中显示额外的信息和启动一个Application的Intent
3、闪灯或LED
4、电话震动
在状态栏(Status Bar)中,通知主要有两类(使用FLAG_标记,后面讲解到):
1、正在运行的事件
2、通知事件
Notification图解如下:
Notification类介绍:
常量:
//表示发送一个Notification的所携带的效果
DEFAULT_ALL 使用默认字段
DEFAULT_LIGHTS 默认闪光
DEFAULT_SOUND 默认声音(uri,指向路径)
DEFAULT_VIRATE 默认震动
PS:以上的效果常量可以累加,即通过mNotifaction.defaults |=DEFAULT_SOUND (有些效果只能在真机上才有,比如震动)
//设置Flag位
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
常用字段:
contentIntent 设置PendingIntent对象,点击时发送该Intent
flags 设置flag位,例如FLAG_NO_CLEAR等
defaults 添加效果
tickerText 显示在状态栏中的文字
when 发送此通知的时间戳
icon 设置图标
常用方法介绍:
void setLatestEventInfo(Context context , CharSequence contentTitle,CharSequence contentText,PendingIntent contentIntent)
功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象
参数: context 上下文环境
contentTitle 状态栏中的大标题
contentText 状态栏中的小标题
contentIntent 点击后将发送PendingIntent对象
另外的就是Notification的几步不同构造方法了,其构造方法的参数含义如上,请参考SDK 。
注意:当我们创造了一个Notification对象时,一定要为其设置setLatestEventInfo()方法,否则程序会报错 .
前面我们说过,NotificationManager是所有Notification的大管家,它的主要职责是加入/移除Notification。
NotificationManager类
通过获取系统服务来获取该对象:
NotificationManager mNotificationManager = (NotificationManager)getSystemServic(Context.NOTIFICATION_SERVICE) ;
常用方法:
public void cancelAll() 移除所有通知 (只是针对当前Context下的Notification)
public void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
public void notify(String tag ,int id, Notification notification) 将通知加入状态栏, 标签为tag,标记为id
public void notify(int id, Notification notification) 将通知加入状态栏,,标记为id
Demo如下:
简单的写一个Notification的类,对通知上面所讲解的知识有一定的认知 。
- package com.qin.notification;
- import Android.app.Activity;
- import android.app.Notification;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity implements OnClickListener
- {
- private Button btnNotify;
- private Button btnCancel;
- private static int NOTIFICATION_ID = 0 ;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnNotify = (Button) findViewById(R.id.btnNotify);
- btnCancel = (Button) findViewById(R.id.btnCancel);
- btnNotify.setOnClickListener(this) ;
- btnCancel.setOnClickListener(this) ;
- }
- @Override
- public void onClick(View v)
- {
- switch (v.getId())
- {
- case R.id.btnNotify:
- showNotification();
- break;
- case R.id.btnCancel:
- removeNotification();
- break;
- default:
- break;
- }
- }
- // 显示一个通知
- private void showNotification()
- {
- // 创建一个通知
- Notification mNotification = new Notification();
- // 设置属性值
- mNotification.icon = R.drawable.icon;
- mNotification.tickerText = "NotificationTest";
- mNotification.when = System.currentTimeMillis(); // 立即发生此通知
- // 带参数的构造函数,属性值如上
- // Notification mNotification = = new Notification(R.drawable.icon,"NotificationTest", System.currentTimeMillis()));
- // 添加声音效果
- mNotification.defaults |= Notification.DEFAULT_SOUND;
- // 添加震动,由于在我的真机上会App发生异常,估计是Android2.2里的错误,略去,不添加
- // mNotification.defaults |= Notification.DEFAULT_VIBRATE ;
- //添加状态标志
- //FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
- //FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉
- //FLAG_ONGOING_EVENT 通知放置在正在运行
- //FLAG_INSISTENT 通知的音乐效果一直播放
- mNotification.flags = Notification.FLAG_INSISTENT ;
- // 设置setLatestEventInfo方法,如果不设置会App报错异常
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- //注册此通知
- // 如果该NOTIFICATION_ID的通知已存在,不会重复添加,只是播放相应的效果(声音等)
- mNotificationManager.notify(NOTIFICATION_ID, mNotification);
- }
- private void removeNotification()
- {
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- // 取消的只是当前Context的Notification
- mNotificationManager.cancel(NOTIFICATION_ID);
- }
- }
- }
评论暂时关闭