zoukankan      html  css  js  c++  java
  • Android中的Notification

    NotificationToast都可以起到通知、提醒的作用。但它们的实现原理和表现形式却完全不一样。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
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    01  //  第1步
      
      
    02  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
      
      
    03  //  第2步
      
      
    04  Notification notification =
      
      
    05  new Notification(R.drawable.icon, "您有新消息了", System.currentTimeMillis());
      
      
    06  //  第3步
      
      
    07  PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);
      
      
    08  //  第4步
      
      
    09  notification.setLatestEventInfo(this, "天气预报", "晴转多云", contentIntent);
      
      
    10  //  第5步
      
      
    11  notificationManager.notify(R.drawable.icon, notification);

     

     

        上面的5行代码正好对应创建和显示Notification5步。在这里要解释一下的是notify方法的第1个参数。这个参数实际上表示了NotificationID。是一个int类型的值。为了使这个值唯一,可以使用res目录中的某些资源ID。例如,在上面的代码中使用了当前Notification显示的图像对应的资源IDR.drawable.icon)作为NotificationID。当然,读者也可以使用其他的值作为NotificationID值。
    由于创建和显示多个Notification的代码类似,因此,在本节的例子中编写了一个showNotification方法来显示Notification,代码如下:

     
     

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

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1   showNotification("今天非常高兴", "今天考试得了全年级第一",
      
    2           "数学100分、语文99分、英语100分,yeah!", R.drawable.smile, R.drawable.smile);
      
    3   showNotification("这是为什么呢?", "这道题为什么会出错呢?", "谁有正确答案啊.",
      
    4           R.drawable.why, R.drawable.why);
      
    5   showNotification("今天心情不好", "也不知道为什么,这几天一直很郁闷.", "也许应该去公园散心了",
      
    6           R.drawable.why, R.drawable.wrath);


    其中第2个和第3Notification使用的是同一个IDR.drawabgle.why),因此,第3Notification会覆盖第2Notification在显示Notification时还可以设置显示通知时的默认发声、震动和Light效果。要实现这个功能需要设置Notification类的defaults属性,代码如下:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    1   private void showNotification(String tickerText, String contentTitle, String contentText, int id, int resId)
      
      
    2   {
      
      
    3       Notification notification = notification =
      
      
    4   new Notification(resId, tickerText, System.currentTimeMillis());
      
      
    5       PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);
      
      
    6       notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);
      
      
    7       //  notificationManager是在类中定义的NotificationManager变量。在 onCreate方法中已经创建
      
      
    8       notificationManager.notify(id, notification);
      
      
    9   }
     



        注意:设置默认发声、震动和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所示。

                   图1


                    图2


                    图3

  • 相关阅读:
    6-6 小球下落 uva679
    6-5 移动的盒子 uva12657
    2-13 如何解决验证码代码实战
    2-11 如何生成用户名
    2-10 输入注册用户名字及获取用户信息.py
    2-9 Expected_conditions源码分析
    2-8 如何使用Expected_conditions判断元素是否可见
    在Excel中将数字设置成文本格式的技巧
    Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
    Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
  • 原文地址:https://www.cnblogs.com/qingblog/p/2503967.html
Copyright © 2011-2022 走看看