Android开发中Notification的使用

         好久没上来CSDN上写技术博客了,近来个人变得有点浮躁,最近总算平息了些,还是要做点事情才行了。最近在做Android的项目开发,要使用到android系统的通知栏,以前没有开发过,今天找了些例子学习了一下,在这里记录下来,希望帮助到一些初级程序员。

         当程序在运行时,按下home键的时候,Activity会执行onPause和onStop方法,此时程序在后台运行。如果我们想要在通知栏看得到这些后台正在运行的图标的话,就可以用Notification。

 

1.首先实现一个用于显示Notification的类:

protected void showNotification() {

 

      // 创建一个NotificationManager对象

      NotificationManagernotificationmanager = (NotificationManager)getSystemService(android.content.Context.NOTIFICATION_SERVICE);

 

      // 定义notification的各种属性

      Notification notification= new Notification(R.drawable.qq,"手机QQ",

            System.currentTimeMillis());

      notification.flags |= Notification.FLAG_ONGOING_EVENT;// 将此通知放到通知栏的"Ongoing""正在运行"组中

      notification.flags |= Notification.FLAG_NO_CLEAR;// 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用

      notification.flags |= Notification.FLAG_SHOW_LIGHTS;

      notification.defaults = Notification.DEFAULT_LIGHTS;

      notification.ledARGB = Color.BLUE;

      notification.ledOnMS = 5000;

 

      // 设置通知的事件消息

      CharSequence contentTitle= "流年(在线)";// 通知栏标题

      CharSequence contentText ="最新版本号2012.3.27";// 通知栏内容

 

      Context contex =getApplicationContext();

 

      Intent notificationIntent= new Intent(contex, Activity02.class);// 点击该通知后要跳转的Activity

      PendingIntent contentItent= PendingIntent.getActivity(contex, 0,

            notificationIntent, 0);

      notification.setLatestEventInfo(contex,contentTitle, contentText,

            contentItent);

      // Notification传递给NotificationManager,第一个参数是一个标识

      notificationmanager.notify(0,notification);

   }

注意:

(1)其中,Notification notification =newNotification(R.drawable.qq, "手机QQ",

           System.currentTimeMillis());R.drawable.qq是显示在通知栏最上面的图标,“手机QQ”是显示在通知栏最上面的名称:如下图所示:

“手机QQ”显示大概一两秒后就会消失。但是我发现在“手机QQ”这个标题好没消失的时候,整个通知是占满整个通知栏的,如果当时还有其他图标,这个时候是看不到的。那么怎么样才能一开始就能同时看到其他的图标呢,解决方法是不设置“手机QQ”这个标题就可以。

 

而第三个参数是获取系统当前的时间。

 

2.接下来我们就可以来使用它了。有与按下home键的时候Activity会调用OnPause 和OnStop方法所以我们就在onStop中调用显示Notification。但是activity跳转的时候也会调用onStop方法,所以我们可以用一个变量来判断当前执行多次onStop方法是否是activity跳转中的,如果不是则显示通知Notification。

protected void onStop() {

 

      super.onStop();

      //如果是activity之间的跳转,即如果是按下的home键则显示通知

      if(!isIntent)

      showNotification();

      Log.v("activity02","onStop");

   }

3.当我们想回到程序,点击了通知栏的图标时要回到程序退出时的状态时,要注意,如果不做任何处理,activity会重新执行onCreate方法,这样的话就不是原来的状态了。在网上查找了一个主要是有这么两个方法:

1.     在配置文件中的使用了Notification的Activity属性中加入android:launchMode="singleInstance"

2.     在显示Notification的方法中,作如下的修改:

Intent intent =new Intent(this,Class.forName("XX包名.TestActivity1"));
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

注意:上面的方法只对于home键有作用,但是对于按back键退出程序是不起作用的,因为back键会destory当前的Activity,所以再次进入的时候还是会调用oncreate方法的。

 

 

4.     经过上面的几个步骤已经可以回到原来的Activity了,这个时候我们就应该把通知栏的信息清除了,由于回到原来的Activity时会执行onRestart--->onStart--->onResume方法,所以就可以再start方法中清除通知栏的相关信息。

protected void onStart() {

 

      super.onStart();

      //取消通知

      NotificationManagernotificationManager = (NotificationManager)this

            .getSystemService(NOTIFICATION_SERVICE);

      notificationManager.cancel(0);

      Log.v("activity02","onStart");

 

   };

其中的notificationManager.cancel(0);中的0就是一开是显示Notification时建立的一个标识。

有的时候,我们的程序就是要真正的退出而不是在后台运行,这个时候,就不需要在显示通知了,此时我们可以在onDestory方法中让通知不显示就可以了。


发布了46 篇原创文章 · 获赞 10 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/JavaChenZhenlin/article/details/17324411