Hello Android - NotificationManager和Notification的使用总结

原帖地址:http://blog.csdn.net/luoyuhhy/article/details/6188721


附原文:

 这几天一直在修改twigee的源代码,其中一个要加入的功能是常驻Notification栏,以前写的时候只能出现在“通知”这一组中,想把它放在“正在运行”组中却不知道怎么放,查了下官方文档,找到了方法,在notification的flags字段中加一下“FLAG_ONGOING_EVENT”就可以了。同时我也把Notification的使用方法给总结了一下。详见下文:

(1)、使用系统定义的Notification

以下是使用示例代码:

view plain
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. //创建一个NotificationManager的引用   
  2.   
  3. String ns = Context.NOTIFICATION_SERVICE;   
  4.   
  5. NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);   
  6.   
  7. //定义Notification的各种属性   
  8.   
  9. int icon = R.drawable.icon; //通知图标   
  10.   
  11. CharSequence tickerText = "Hello"//状态栏显示的通知文本提示   
  12.   
  13. long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示   
  14.   
  15. //用上面的属性初始化Nofification   
  16.   
  17. Notification notification = new Notification(icon,tickerText,when);   
  18.   
  19. /*  
  20.  
  21. * 添加声音  
  22.  
  23. * notification.defaults |=Notification.DEFAULT_SOUND;  
  24.  
  25. * 或者使用以下几种方式  
  26.  
  27. * notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");  
  28.  
  29. * notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");  
  30.  
  31. * 如果想要让声音持续重复直到用户对通知做出反应,则可以在notification的flags字段增加"FLAG_INSISTENT"  
  32.  
  33. * 如果notification的defaults字段包括了"DEFAULT_SOUND"属性,则这个属性将覆盖sound字段中定义的声音  
  34.  
  35. */   
  36.   
  37. /*  
  38.  
  39. * 添加振动  
  40.  
  41. * notification.defaults |= Notification.DEFAULT_VIBRATE;  
  42.  
  43. * 或者可以定义自己的振动模式:  
  44.  
  45. * long[] vibrate = {0,100,200,300}; //0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒  
  46.  
  47. * notification.vibrate = vibrate;  
  48.  
  49. * long数组可以定义成想要的任何长度  
  50.  
  51. * 如果notification的defaults字段包括了"DEFAULT_VIBRATE",则这个属性将覆盖vibrate字段中定义的振动  
  52.  
  53. */   
  54.   
  55. /*  
  56.  
  57. * 添加LED灯提醒  
  58.  
  59. * notification.defaults |= Notification.DEFAULT_LIGHTS;  
  60.  
  61. * 或者可以自己的LED提醒模式:  
  62.  
  63. * notification.ledARGB = 0xff00ff00;  
  64.  
  65. * notification.ledOnMS = 300; //亮的时间  
  66.  
  67. * notification.ledOffMS = 1000; //灭的时间  
  68.  
  69. * notification.flags |= Notification.FLAG_SHOW_LIGHTS;  
  70.  
  71. */   
  72.   
  73. /*  
  74.  
  75. * 更多的特征属性  
  76.  
  77. * notification.flags |= FLAG_AUTO_CANCEL; //在通知栏上点击此通知后自动清除此通知  
  78.  
  79. * notification.flags |= FLAG_INSISTENT; //重复发出声音,直到用户响应此通知  
  80.  
  81. * notification.flags |= FLAG_ONGOING_EVENT; //将此通知放到通知栏的"Ongoing"即"正在运行"组中  
  82.  
  83. * notification.flags |= FLAG_NO_CLEAR; //表明在点击了通知栏中的"清除通知"后,此通知不清除,  
  84.  
  85. * //经常与FLAG_ONGOING_EVENT一起使用  
  86.  
  87. * notification.number = 1; //number字段表示此通知代表的当前事件数量,它将覆盖在状态栏图标的顶部  
  88.  
  89. * //如果要使用此字段,必须从1开始  
  90.  
  91. * notification.iconLevel = ; //  
  92.  
  93. */   
  94.   
  95. //设置通知的事件消息   
  96.   
  97. Context context = getApplicationContext(); //上下文   
  98.   
  99. CharSequence contentTitle = "My Notification"//通知栏标题   
  100.   
  101. CharSequence contentText = "Hello World!"//通知栏内容   
  102.   
  103. Intent notificationIntent = new Intent(this,Main.class); //点击该通知后要跳转的Activity   
  104.   
  105. PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);   
  106.   
  107. notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);   
  108.   
  109. //把Notification传递给NotificationManager   
  110.   
  111. mNotificationManager.notify(0,notification);  
  112.    

如果想要更新一个通知,只需要在设置好notification之后,再次调用 setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。 (2)、使用自定义的Notification

要创建一个自定义的Notification,可以使用RemoteViews。要定义自己的扩展消息,首先要初始化一个RemoteViews对象,然后将它传递给Notification的contentView字段,再把PendingIntent传递给contentIntent字段。以下示例代码是完整步骤:

view plain
  1. //1、创建一个自定义的消息布局 view.xml   
  2.   
  3. <?xml version="1.0" encoding="utf-8"?>   
  4.   
  5. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  6.   
  7. android:layout_width="fill_parent" android:layout_height="fill_parent">   
  8.   
  9. <ImageView android:id="@+id/image" android:layout_width="wrap_content"   
  10.   
  11. android:layout_height="fill_parent" android:layout_marginRight="10dp" />   
  12.   
  13. <TextView android:id="@+id/text" android:layout_width="wrap_content"   
  14.   
  15. android:layout_height="fill_parent" android:textColor="#000" />   
  16.   
  17. </LinearLayout>   
  18.   
  19. //2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段   
  20.   
  21. RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view);   
  22.   
  23. contentView.setImageViewResource(R.id.image,R.drawable.icon);   
  24.   
  25. contentView.setTextViewText(R.id.text,”Hello,this message is in a custom expanded view”);   
  26.   
  27. notification.contentView = contentView;   
  28.   
  29. //3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)   
  30.   
  31. Intent notificationIntent = new Intent(this,Main.class);   
  32.   
  33. PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);   
  34.   
  35. notification.contentIntent = contentIntent;   
  36.   
  37. //4、发送通知   
  38.   
  39. mNotificationManager.notify(2,notification);   
  40.   
  41. //以下是全部示例代码   
  42.   
  43. //创建一个NotificationManager的引用   
  44.   
  45. String ns = Context.NOTIFICATION_SERVICE;   
  46.   
  47. NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);   
  48.   
  49. //定义Notification的各种属性   
  50.   
  51. int icon = R.drawable.icon; //通知图标   
  52.   
  53. CharSequence tickerText = "Hello"//状态栏显示的通知文本提示   
  54.   
  55. long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示   
  56.   
  57. //用上面的属性初始化Nofification   
  58.   
  59. Notification notification = new Notification(icon,tickerText,when);   
  60.   
  61. RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view);   
  62.   
  63. contentView.setImageViewResource(R.id.image, R.drawable.iconempty);   
  64.   
  65. contentView.setTextViewText(R.id.text, "Hello,this is JC");   
  66.   
  67. notification.contentView = contentView;   
  68.   
  69. Intent notificationIntent = new Intent(this,Main.class);   
  70.   
  71. PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);   
  72.   
  73. notification.contentIntent = contentIntent;   
  74.   
  75. //把Notification传递给NotificationManager   
  76.   
  77. mNotificationManager.notify(0,notification);  
  78.    

 


你可能感兴趣的:(Hello Android - NotificationManager和Notification的使用总结)