Notification详解

通知(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值