一、通知的基本使用  

 
 //1、获取一个NotificationManager对象,注意是使用getSystemService(NOTIFICATION_SERVICE)的方式
 
  

               NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
  
 
  

               /** 
  
 
  
2、获取一个notification(直接new)
 
  

                * 参数1:通知的图标 
  
 
  

                * 参数2:用于指定通知的 ticker 内容,当通知刚被创建的时候,它会在系统的状态栏一闪而过,属于一种瞬时的提示信息 
  
 
  

                * 参数3:用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上 
  
 
  

                */ 
  
 
  

               Notification notification = new Notification(R.drawable.ic_launcher, 
  
 
  

                         "This is ticker text", System.currentTimeMillis()); 
  
 
  

               /** 
  
 
  
3、对通知的布局进行设定,这里只需要调用Notification 的 setLatestEventInfo()方法就可以给通知设置一个标准的布局
 
  

                * 参数1:上下文context 
  
 
  

                * 参数2:标题 
  
 
  

                * 参数3:通知内容 
  
 
  

                * 参数4:暂时还用不到,可以先传入 null 
  
 
  

                */ 
  
 
  

               notification.setLatestEventInfo(this, "This is content title", 
  
 
  

                         "This is content text", null); 
  
 
  

               /** 
  
 
  
4、显示通知
 
  

                * 参数1: id,要保证为每个通知所指定的 id 都是不同的 
  
 
  

                * 参数2: Notification 对象 
  
 
  

                */ 
  
 
  

               manager.notify(1, notification); 
  
 
  

      
  
 
 
 
  二、然后发现我们点击之后没反应,这就引入了另一个知识点 PendingIntent 
 
 
 
 
  可以把 PendingIntent 简单地理解为延迟执行的 Intent 
 
 
 
  
 
 

                NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
   
 
   
 
    
 
   

                Notification notification = new Notification(R.drawable.ic_launcher, 
   
 
   

                          "This is ticker text", System.currentTimeMillis()); 
   
 
   

                /** 
   
 
   

                 * 3、对通知的布局进行设定,这里只需要调用Notification 的 setLatestEventInfo()方法就可以给通知设置一个标准的布局 
   
 
   

                 * 参数1:上下文context 
   
 
   

                 * 参数2:标题 
   
 
   

                 * 参数3:通知内容 
   
 
   

                 * 参数4:暂时还用不到,可以先传入 null 
   
 
   

                 */ 
   
 
   
 Intent intent = new Intent(this, NotificationActivity.class);
 
   
           PendingIntent pi = PendingIntent.getActivity(this, 0, intent,
 
   
           PendingIntent.FLAG_CANCEL_CURRENT);
 
   
          //还记得我们刚才用的参数4吧,当时我们只是传入了一个null,其实这个PendingIntent就是要传到这里的。这里我们创建了一个新的Activity,当我们点击通知的时候,就会跳转到指定的页面
 
   

                notification.setLatestEventInfo(this, "This is content title", 
   
 
   

                          "This is content text",pi); 
   
 
   
 
    
 
   

                manager.notify(1, notification); 
   
 
  
 
   
 
 
 
  三、让通知的图标消失   逻辑就是当我们进入到我们点击通知的页面时,把通知给cancel()掉 
 
 
 
 
  
 
 

     NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
   
 
   

     //这里我们传入的参数1就是上面我们notify的时候指定的id 
   
 
   
    manager.cancel(1);
 
  
 
   四、通知的高级技巧 
  
 
  
 
   
 
  
 
  
音频
 
 

    Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg")); 
  
 
  

    notification.sound = soundUri; 
  
 
 
 
  
 
 
振动
 
 

   四个参数下标为 0 的值表示手机静止的时长,下标为 1 的值表示手机振动的时长,下标为 2 的值又表示手 
 
 
 

   机静止的时长,以此类推。所以,如果想要让手机在通知到来的时候立刻振动 1 秒,然后静 
 
 
 

   止 1 秒,再振动 1 秒,代码就可以写成 
 
 
 

    long[] vibrates = {0, 1000, 1000, 1000}; 
  
 
  

    notification.vibrate = vibrates; 
  
 
 

   注意手机振动还是要申请权限的: 
 
 
 

   <uses-permission android:name="android.permission.VIBRATE" /> 
 
 
 
 
  
 
 
LED 灯的显示
 
 

   ledARGB 用于控制 LED 灯的颜色,一般有红绿蓝三种颜色可选。ledOnMS 用于指定 LED 灯亮起的时长,以毫秒为单位。ledOffMS用于指定 LED 灯暗去的时长,也是以毫秒为单位。flags 可用于指定通知的一些行为,其中 
 
 
 

   就包括显示 LED 灯这一选项。所以,当通知到来时,如果想要实现 LED 灯以绿色的灯光一闪一闪的效果,就可以写成: 
 
 
 
 
  
 
 

    notification.ledARGB = Color.GREEN; 
  
 
  

    notification.ledOnMS = 1000; 
  
 
  

    notification.ledOffMS = 1000; 
  
 
  

    notification.flags = Notification.FLAG_SHOW_LIGHTS; 
  
 
 
 
  
 
 
默认效果,它会根据 
  
 当前手机的环境来决定播放什么铃声,以及如何振动,写法如下: 
  
 notification.defaults = Notification.DEFAULT_ALL; 
  
 注意,以上所涉及的这些高级技巧都要在手机上运行才能看得到效果,模拟器是无法表 
  
 

   现出振动、以及 LED 灯闪烁等功能的。