zoukankan      html  css  js  c++  java
  • Android API Level在11前后及16之后时Notification的不同用法

    作为刚入门Android的小白,最近在按照郭大神的《第一行代码》在练习,在用到Notification时遇到了一些问题,网上资料比较零散,我这里做了一个总结分析给各位,若有错误,恳请指正~

    Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification

    Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式,在默认情况下,Notification仅显示消息标题、消息内容、送达时间这3项内容。

    以下就是通知的基本布局:

    不同API level的区别主要是Notification的构造方法、得到实例的方法,这里顺便总结一下Notification的用法,按照步骤分别给出不同API level下的做法:

    1、获取Notification管理器

    NotificationManager noteManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    

    获取管理器的方式都一样,没有改变。

    2、新建一个Notification,设置状态栏显示样式

    这里只列举了最简单的样式设置,具体的大家可以参考API文档。

    // API Level < 11 (Android 3.0)
    Notification notification = new Notification(
    		   R.mipmap.ic_launcher, "This is ticker text",
    		   System.currentTimeMillis());
    

    API<11时,可以直接用Notification的构造方法新建一个Notification,十分方便。

      ps:我用的IDE是AndroidStudio,所以icon的id是R.mipmap.***。

    // API Level >= 11 (Android 3.0) && API Level < 16 (Android 4.1)
    Notification.Builder builder = new Notification.Builder(this)
                         .setSmallIcon(R.mipmap.ic_launcher)
                         .setTicker("This is ticker text")
                         .setWhen(System.currentTimeMillis());
    Notification note = builder.getNotification(); // 调用getNotification()来生成Notification

    API>11后,就要用Notification.Builder()来代替了,官方API是这样说的:

      Notification(int icon, CharSequence tickerText, long when)

      This constructor was deprecated in API level 11. Use Notification.Builder instead.
     
    那就没有统一的方案吗?当然有了
     
    我在介绍Notification.Builder的API网页上看到这样一段话:
     
      If your app supports versions of Android as old as API level 4, you can instead use NotificationCompat.Builder, available in the Android Support library.
     
    这说明只要API>4,都可以用NotificationCompat.Builder,实践证明也确实可行:
     
    //API Level >= 4 (Android 1.6) && API Level < 16 (Android 4.1)
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
                .setSmallIcon(R.mipmap.ic_launcher) 
                .setTicker("This is ticker text") 
                .setWhen(System.currentTimeMillis());
    Notification note =builder.getNotification(); //调用builder.getNotification()来生成Notification

    因此推荐用NotificationCompat.Builder这种方式。

    注意到我在注释里写的 "&& API Level < 16 (Android 4.1)" 了吗?这是因为在Google官方API文档上是这么说的:

      public Notification getNotification ()    Added in API level 11

        This method was deprecated in API level 16.

        Use build() instead

    因此,当API>=16即Android4.1之后,就要用build()来代替了,使用方法一样,在此就不赘述了。

    3、设置Notification的触发事件

    点击Notification后,一般都是触发一个新的Activity:

    Intent intent = new Intent(this, AnotherActivity.class);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent,
                      PendingIntent.FLAG_CANCEL_CURRENT);    
    

    这里不同API版本都一样。

    4、设置Notification在通知栏里的样式

    // API Level < 11 (Android 3.0)
    note.setLatestEventInfo(this, "This is content title", "This is content text", pi);
    

    API<11时,调用的是Notification类的setLatestEventInfo方法。

    // API Level >= 11 (Android 3.0)
    builder.setContentIntent(pi)
                     .setContentTitle("This is content title")
                     .setContentText("This is content text");

    而当API>=11时,设置通知栏中的样式是调用Builder的setContentIntent方法,设置好之后在调用build()方法生成Notification实例。

    类似的,NotificationCompat.Builder也是调用同样的方法,这里就不赘述了。

    5、发布该Notification

    第一个参数为该notification的ID

    noteManager.notify(1, note);
    

    总结一下:

    低版本(API低于11、16)中的部分方法已经被弃用:

     (1)Notification.Builder(this).getNotification()

     (2)mNotification.setLatestEventInfo(this, "title", "content", null);  

    建议开发过程中尽量使用NotificationCompat.Builder(this)的构建方法去创建一个通知类。

  • 相关阅读:
    hihoCoder #1077 RMQ问题再临-线段树
    ms sql 获取字符串首字母
    如何设置gen_server在退出时执行相关操作
    C++拾遗
    [置顶] Linux下文件和目录权限说明
    Android百度地图之显示地图
    USACO March. 2012
    JNI之HelloWorld
    复习C语言系列二:动态调用函数指针数组
    HDU2527:Safe Or Unsafe(哈弗曼树)
  • 原文地址:https://www.cnblogs.com/hasse/p/5164417.html
Copyright © 2011-2022 走看看