Android系列讲座(1):Notification 与状态栏信息

本文为原创,如需转载,请注明作者和出处,谢谢!

     Notification Toast 都可以起到通知、提醒的作用。但它们的实现原理和表现形式却完全不一样。Toast 其实相当于一个组件(Widget )。有些类似于没有按钮的对话 框。而Notification 是显示在屏幕上方状态栏中的信息。还有就是Notification 需要用NotificationManager 来管理,而Toast 只需要简单地创建Toast 对象即可。

下面来看一下创建并显示一个Notification的步骤。创建和显 示一个Notification需要如下5步:

1. 通过getSystemService方法获得一个NotificationManager对象。

2. 创建一个Notification对象。每一个Notification对应一个Notification对象。在这一步需要设置显示在屏幕上方状态栏的通知消息、通知消息前方的图像资源ID和发出通知的时间。一般为当前时间。

3. 由于Notification可以与应用程序脱离。也就是说,即使应用程序被关闭,Notification仍然会显示在状态栏 中。当应用程序再次启动后,又可以重新控制这些Notification。如清除或替换它们。因此,需要创建一个PendingIntent对象。该对象由Android系统负责维护,因此,在应用程序关闭后,该对象仍然不会被释放。

4. 使用Notification类的setLatestEventInfo方法设置Notification的详细信息。

5. 使用NotificationManager类的notify方法显示Notification消息。在这一步需要指定标识Notification的唯一ID。这个ID必须相对于同一个NotificationManager对象是唯一的,否则就会覆盖相同IDNotificaiton

心动不如行动,下面我们来演练一下如何在状 态栏显示一个Notification,代码如下:

//   第1步
NotificationManager notificationManager  =  (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//   第2步
Notification notification  =  new  Notification(R.drawable.icon,  " 您有新消息了 " , System.currentTimeMillis());
//   第3步
PendingIntent contentIntent  =  PendingIntent.getActivity( this 0 , getIntent(),  0 );
//   第4步
notification.setLatestEventInfo( this " 天气预报 " " 晴 转多云 " , contentIntent);
//   第5步
notificationManager.notify(R.drawable.icon, notification);

下面的代码使用showNotification方法显示了3Notification消息。

 

showNotification( " 今 天非常高兴 " " 今天考试得了全年级第一 " ,
        
" 数学100分、语文99分、英语100分,yeah! " , R.drawable.smile, R.drawable.smile);
showNotification(
" 这是为什么呢? " " 这 道题为什么会出错呢? " " 谁有正确答案啊. " ,
        R.drawable.why, R.drawable.why);
showNotification(
" 今天心情不好 " " 也 不知道为什么,这几天一直很郁闷. " " 也许应该去公园散心了 " ,
        R.drawable.why, R.drawable.wrath);
其中第2 个和第3 Notification 使用的是同一个ID R.drawabgle.why ),因此,第3 Notification 会覆盖第2 Notification

在显示Notification时还可以设置显示通 知时的默认发声、震动和Light效果。要实现这个功能需要设置Notification类的defaults属性,代码如下:

 

notification.defaults  =  Notification.DEFAULT_SOUND;         //   使用默认的声音
notification.defaults  =  Notification.DEFAULT_VIBRATE;         //   使用默认的震动
notification.defaults  =  Notification.DEFAULT_LIGHTS;         //   使用默认的Light
notification.defaults  =  Notification.DEFAULT_ALL;             //   所有的都使用默认值
    注意:设置默认发声、震动和Light 的方法是setDefaults 。该 方法与showNotification 方法的实现代码基本相同,只是在调用notify 方法之前需要设置defaults 属性(defaults 属性必须在 调用notify 方法之前调用,否则不起作用)。在设置默认震动效果时还需要在AndroidManifest.xml 文件中通过<uses-permission> 标签设置android.permission.VIBRATE 权限。

    如果要清除某个消息,可以使用NotificationManager类 的cancel方 法,该方法只有一个参数,表示要清除的NotificationID。使用cancelAll可以清除当前NotificationManager对象中的所有Notification

    运行本节的例子,单击屏幕上显示Notification的按钮,会显示如 图1所示的消息。每一个消息会显示一会,然后就只显示整个Android系统(也包括其他应用程序) 的Notification(只显示图像部分)。如图2所示。如果将状态栏拖下来,可以看 到Notification的详细信息和发出通知的时间(也就是Notification类的构造方法的第3个参数值),如图3所 示。当单击【清除通知】按钮,会清除本应用程序显示的所有Notification,清除后的效果如图4所示。
Android系列讲座(1):Notification 与状态栏信息
               图1

Android系列讲座(1):Notification 与状态栏信息
                图2

Android系列讲座(1):Notification 与状态栏信息
                图3

Android系列讲座(1):Notification 与状态栏信息
               图4

你可能感兴趣的:(notification)