《Android/OPhone开发完全讲义》连载(5):Notification与状态栏信息
本文为新书《Android/OPhone 开发完全讲义》的内容连载。《Android/OPhone开发完全讲义》一书现已出版,敬请关注。
购 买:
互动网(china- pub)
当当(dangdang)
卓越亚马逊
《Android/OPhone开发完全讲义》目录
源代码下载
上一篇: Android SDK中常用命令行工具(二)
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对象是唯一的,否则就会覆盖相同ID的Notificaiton。
心动不如行动,下面我们来演练一下如何在状态栏显示一个Notification,代码如下:
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);
上面的5行代码正好对应创建和显示Notification的5步。在这里要解释一下的是notify方法的第1个参数。这个参数实际上表示了Notification的ID。是一个int类型的值。为了使这个值唯一,可以使用res目录中的某些资源ID。例如,在上面的代码中使用了当前Notification显示的图像对应的资源ID(R.drawable.icon)作为Notification的ID。当然,读者也可以使用其他的值作为Notification的ID值。
由于创建和显示多个Notification的代码类似,因此,在本节的例子中编写了一个showNotification方法来显示Notification,代码如下:
{
Notification notification = notification = new Notification(resId, tickerText, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity( this , 0 , getIntent(), 0 );
notification.setLatestEventInfo( this , contentTitle, contentText, contentIntent);
// notificationManager是在类中定义的NotificationManager变量。在onCreate方法中已经创建
notificationManager.notify(id, notification);
}
下面的代码使用showNotification方法显示了3个Notification消息。
" 数学100分、语文99分、英语100分,yeah! " , R.drawable.smile, R.drawable.smile);
showNotification( " 这是为什么呢? " , " 这道题为什么会出错呢? " , " 谁有正确答案啊. " ,
R.drawable.why, R.drawable.why);
showNotification( " 今天心情不好 " , " 也不知道为什么,这几天一直很郁闷. " , " 也许应该去公园散心了 " ,
R.drawable.why, R.drawable.wrath);
在显示Notification时还可以设置显示通知时的默认发声、震动和Light效果。要实现这个功能需要设置Notification类的defaults属性,代码如下:
notification.defaults = Notification.DEFAULT_VIBRATE; // 使用默认的震动
notification.defaults = Notification.DEFAULT_LIGHTS; // 使用默认的Light
notification.defaults = Notification.DEFAULT_ALL; // 所有的都使用默认值
如果要清除某个消息,可以使用NotificationManager类的cancel方法,该方法只有一个参数,表示要清除的Notification的ID。使用cancelAll可以清除当前NotificationManager对象中的所有Notification。
运行本节的例子,单击屏幕上显示Notification的按钮,会显示如图1所示的消息。每一个消息会显示一会,然后就只显示整个Android系统(也包括其他应用程序)的Notification(只显示图像部分)。如图2所示。如果将状态栏拖下来,可以看到Notification的详细信息和发出通知的时间(也就是Notification类的构造方法的第3个参数值),如图3所示。当单击【清除通知】按钮,会清除本应用程序显示的所有Notification,清除后的效果如图4所示。
图1
图2
图3
图4
下一篇:为TextView组件加上边框
《Android开发完全讲义(第2版)》(本书版权已输出到台湾)
http://product.dangdang.com/product.aspx?product_id=22741502
《Android高薪之路:Android程序员面试宝典 》http://book.360buy.com/10970314.html
新浪微博:http://t.sina.com.cn/androidguy 昵称:李宁_Lining