当前位置:操作系统 > 安卓/Android >>

解读Notification

综述
    status bar notification添加一个图标(和一条可选的ticker-text消息)到系统的status bar(状态条),并且显示一个notification message(通知消息)在系统的notifications window(消息窗口)中。当用户选择了消息窗口中的一条消息,Android系统就发出一个通过Notification定义的Intent(通常是用于启动一个activity)。你也可以通过配置notification以通过声音、震动或者是设备上的flashing lights(闪光灯)来告知用户。
    status bar notification用于后台运行的服务需要告知用于一些事件并且得到用户的响应的情况下。后台运行的服务为了及时得到用户的相应不应该自己启动一个activity。而应该创建一个用户选择后可以启动activity的status bar notification。
    图一显示了一个左边包含一个nitification的图片。
    图二显示了在notifications window中有的notifications。
基本
    一个Activity 或者是Service可以初始化一个status bar notification。由于一个通常只有在处于前台运行并且和用户交互的时候才能执行操作,因此,我们通常是通过一个service来创建notifications。这时,即使用户在运行其他的程序或者是设备进入休眠状态的时候,我们依然可以在后台创建notifications。要创建一个notification,我们必须要用到两个类:Notification和NotificationManage。
    用Notification类的实例来定义status bar notification的属性,例如:status bar notification的图标、显示的message(信息)以及额外的设置,例如播放的声音。NotificationManager是Android的一项系统服务,通过它可以执行和管理所有的status bar notifications。你不能直接实例化NotificationManager这个类。为了实现自己的Notification,你必须通过getSystemService()方法获得NotificationManager,然后,当你想通知用户的时候,将Notification传递给notify()这个方法,这样就实现了自己的status bar notification。
    通过如下步骤来创建一个status bar notification:
    1.获得NotificationManager:
         String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
    2.实例化Notification:
         int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);
    3.定义notification要显示的message和PendingIntent:
         Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    到这里,我们就实现了一个notification,用户应该可以收到这个notification了。
    这里我们举一个实例,方便大家清楚的了解,要实现的效果就是在主Mactivity上显示一个Button,当按下这个Button时,就发出我们自定义的一个notification,具体步骤如下:
    第一步:新建一个工程,命名为:Notification01;
    第二步:修改布局文件main.xml,添加一个Button;

    第三步:修改java源文件,代码如下:

public class Notification01Activity extends Activity { 
    private Button sendBtn; 
    private static final int HELLO_ID = 1; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        sendBtn = (Button)findViewById(R.id.sendBtn); 
         
        String ns = Context.NOTIFICATION_SERVICE; 
        final NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
        int icon = R.drawable.notification_icon; 
        CharSequence tickerText = "Notification01"; 
        long when = System.currentTimeMillis(); 
 
        final Notification notification = new Notification(icon, tickerText, when); 
         
        final Context context = getApplicationContext(); 
        final CharSequence contentTitle = "My notification"; 
        final CharSequence contentText = "Notification01!"; 
         
        sendBtn.setOnClickListener(new View.OnClickListener() { 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub  
 
                Intent notificationIntent = new Intent(Notification01Activity.this, Notification01Activity.class); 
                PendingIntent contentIntent = PendingIntent.getActivity(Notification01Activity.this, 0, notificationIntent, 0); 
 
                notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
 
                mNotificationManager.notify(HELLO_ID, notification); 
            } 
        }); 
         
    } 

public class Notification01Activity extends Activity {
 private Button sendBtn;
 private static final int HELLO_ID = 1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        sendBtn = (Button)findViewById(R.id.sendBtn);
       
  String ns = Context.NOTIFICATION_SERVICE;
        final NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
        int icon = R.drawable.notification_icon;
 

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,