Notification详解

来源:互联网 发布:关键词优化技巧 编辑:程序博客网 时间:2024/06/07 20:14

通知(notification)是Android系统中比较有特色的一个功能,当某个应用希望向用户发出一些提示信息,而该应用又不再前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏上会显示一条通知的图标,下拉状态栏后可以看到通知的详细内容。Android通知功能获得大量用户的认可和喜欢。

一、通知的基本用法

       通知的用法还是比较灵活的,既可以在活动里面创建,也可以在广播接收器里面创建,还可以在服务里面创建。相对于广播接收器和服务,在活动里创建通知的场景还是比较少的,因为一般只有当程序进入到后台的时候我们才需要使用通知。

        创建通知的步骤:首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。getSystemService()方法接受一个字符串参数用于确定系统的哪个服务,这里传入Context.NOTIFICATION_SERVICE即可。因此,获取NotificationManager的实例可以写成这样:

              NotificationManager manager = (NotificationManager )getSystemService(Context.NOTIFICATION_SERVICE);

      接下来需要使用一个Builder构造器来创建Notification对象,使用support-v4库中提供一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们对程序在所有Android系统版本上都能正常工作,代码如下:

            Notification notification = new NotificationCompat.Builder(context).build();    

我们可以在最终build()方法之前连缀任意多的设置方法来创建一个丰富的Notification对象,先来看一些最基本的设置:

           Notification notification = new NotificationCompat.Builder(context)

                       .setContentTitle("This is content title")   //用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。

                       .setContentText("This is content text")  //用于指定通知的正文内容,下拉系统状态栏就可以看到这部分内容。

                       .setWhen(System.currentTimeMillis())  //用于指定通知被创建的时间,以毫秒为单位,下拉系统状态栏,这里指定的时间会显示在相应的通知上。

                       .setSmallIcon(R.drawable.small_icon)   //用于设置通知的小图标

                       .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon)

                       .build();

        最后只需要调用NotificationManager的notify()方法就可以让通知显示出来。notify()方法有两个参数,第一个参数就是id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification对象,这里直接将我们刚刚创建好的Notification对象传入即可。因此,显示一个通知就可以写成:

           manager.notify(1,notification);

二、PendingIntent的基本用法

       1、PendingIntent与Intent的区别

            他们都可以去指明某一个“意图”,都可以用于启动活动,启动服务以及发送广播等。不同的是,Intent更加倾向于立刻执行某个动作,而PendingIntent更加倾向于在某个          合适的时机去执行某个动作。所以,也可以把PendingIntent简单地理解为延迟执行的Intent。

       2、PendingIntent的基本用法

             PendingIntent主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需要来选择是使用getActivity()方法、getBroadcast()方法,还是getService()方法。这几个方法所接受的参数都是相同的,第一个参数依旧是Context,第二个参数一般用不到,通常传入0即可。第三个参数是一个Intent对象,我们可以通过这个对象构建出PendingIntent的“意图”。第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,每种植的具体含义查文档,通常情况下这个参数传入0就可以。

      3、核心代码:

        Intent intent = new Intent(this,NotificationActivity.lass);

       PendingIntent pi  = PendingIntent.getActivity(this,0,intent,0);

       NotificationManager manager = (NotificationManager ) getSystemService(NOTIFICATION_SERVICE);

       Notification notification = new NotificationCompat.Builder(this)

                        .setContentTitle("This is content title")   //用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。

                       .setContentText("This is content text")  //用于指定通知的正文内容,下拉系统状态栏就可以看到这部分内容。

                       .setWhen(System.currentTimeMillis())  //用于指定通知被创建的时间,以毫秒为单位,下拉系统状态栏,这里指定的时间会显示在相应的通知上。

                       .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/notification.ogg")))  //音频文件

                        .setVibrate(new long[]{0,1000,1000,1000})  //设置震动

                        .setLights(Color.GREEN,1000,1000)   //设置LED灯

                       .setDefaults(NotificationCompat.DEFAULT_ALL)  

                       .setSmallIcon(R.drawable.small_icon)   //用于设置通知的小图标

                       .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon)

                       .setContentIntent(pi)

                       .build();

          manager.notify(1,notification);

      4、如何消失通知图标

        1)在NotificationCompat.Builder中再连缀一个setAutoCancel()方法

              Notification notification = new NotificationCompat.Builder(this)

                           ........

                           .setAuotoCancel(true)

                           .build();

            可以看到,setAutoCancel()方法传入true,将表示当点击了这个通知的时候,通知会自动取消掉。

        2)显示地调用NotificationManager的cancel()方法将它取消

              NotificationManager manager = (NotificationManager ) getSystemService(NOTIFICATION_SERVICE);

              manager .cancel(1); 

      5、下面对Notification类中的一些常量,字段,方法简单介绍一下

         1)常量:

            DEFAULT_ALL                  使用所有默认值,比如声音,震动,闪屏等等
            DEFAULT_LIGHTS            使用默认闪光提示
            DEFAULT_SOUNDS           使用默认提示声音
            DEFAULT_VIBRATE           使用默认手机震动 
          【说明】:加入手机震动,一定要在manifest.xml中加入权限:
            <uses-permission android:name="android.permission.VIBRATE" />
            以上的效果常量可以叠加,即通过
            notification.defaults =DEFAULT_SOUND|DEFAULT_VIBRATE;  
            notification.defaults |= DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有)

            
       2)设置flag位
           FLAG_AUTO_CANCEL                  该通知能被状态栏的清除按钮给清除掉
           FLAG_NO_CLEAR                         该通知能被状态栏的清除按钮给清除掉
           FLAG_ONGOING_EVENT              通知放置在正在运行
           FLAG_INSISTENT                        是否一直进行,比如音乐一直播放,知道用户响应

          
      3)常用字段:
          contentIntent          设置PendingIntent对象,点击时发送该Intent
          defaults                   添加默认效果
          flags                        设置flag位,例如FLAG_NO_CLEAR等
          icon                          设置图标
          sound                       设置声音
          tickerText                 显示在状态栏中的文字
          when                        发送此通知的时间戳

                
  6、NotificationManager常用方法介绍:
        public void cancelAll() 移除所有通知(只是针对当前Context下的Notification)
        public  void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
        public  void notify(String tag ,int id, Notification notification) 将通知加入状态栏,标签为tag,标记为id
        public  void notify(int id, Notification notification) 将通知加入状态栏,标记为id

原创粉丝点击