java notification,Android学习指南之十九:Android Notification(通知)详解

Notification(通知)使你的应用程序能够在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。Notification是由NotificationManager(系统服务)统一管理的。

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

创建并显示Notification的步骤

下面来看一下创建并显示一个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的应用实例

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

Java代码//  第1步

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

//  第2步

Notification notification =

newNotification(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,代码如下:

Java代码privatevoidshowNotification(String tickerText, String contentTitle, String contentText,intid,intresId)

{

Notification notification = notification =

newNotification(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消息。

Java代码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属性,代码如下:

Java代码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文件中通过标签设置android.permission.VIBRATE权限。

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

运行本节的例子,单击屏幕上显示Notification的按钮,会显示下图所示的消息。

dadfe74a9eb6d0ef7789c0099a6e03d0.gif

每一个消息会显示一会,然后就只显示整个Android系统(也包括其他应用程序)的Notification(只显示图像部分)。如下图所示。

ba6fd00c000dc7e496d9962391490841.gif

如果将状态栏拖下来,可以看到Notification的详细信息和发出通知的时间(也就是Notification类的构造方法的第3个参数值),如下图所示。

f745a702b52381f8774565483b8be02b.gif

当单击【清除通知】按钮,会清除本应用程序显示的所有Notification,清除后的效果如下图所示。

f28ac0f169b5b2cfc8df31568b2eba30.gif

2012年8月4日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值