001 | NotificationManager 和Notification的使用总结(转) |
002 | 文章分类:移动开发 |
003 | 这几天一直在修改twigee的源代码,其中一个要加入的功能是常驻Notification栏,以前写的时候只能出现 在“通知”这一组中,想把它放在“正在运行”组中却不知道怎么放,查了下官方文档,找到了方法,在notification的flags字段中加一下 “FLAG_ONGOING_EVENT”就可以了。同时我也把Notification的使用方法给总结了一下。详见下文: |
004 | ( 1 )、使用系统定义的Notification |
005 | 以下是使用示例代码: |
006 | //创建一个NotificationManager的引用 |
007 | String ns = Context.NOTIFICATION_SERVICE; |
008 | NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns); |
009 | // 定义Notification的各种属性 |
010 | int icon = R.drawable.icon; //通知图标 |
011 | CharSequence tickerText = "Hello" ; //状态栏显示的通知文本提示 |
012 | long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示 |
013 | //用上面的属性初始化 Nofification |
014 | Notification notification = new Notification(icon,tickerText,when); |
015 | /* |
016 | * 添加声音 |
017 | * notification.defaults |=Notification.DEFAULT_SOUND; |
018 | * 或者使用以下几种方式 |
019 | * notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3"); |
020 | * notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); |
021 | * 如果想要让声音持续重复直到用户对通知做出反应,则可以在notification的flags字段增加"FLAG_INSISTENT" |
022 | * 如果notification的defaults字段包括了"DEFAULT_SOUND"属性,则这个属性将覆盖sound字段中定义的声音 |
023 | */ |
024 | /* |
025 | * 添加振动 |
026 | * notification.defaults |= Notification.DEFAULT_VIBRATE; |
027 | * 或者可以定义自己的振动模式: |
028 | * long[] vibrate = {0,100,200,300}; //0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒 |
029 | * notification.vibrate = vibrate; |
030 | * long数组可以定义成想要的任何长度 |
031 | * 如果notification的defaults字段包括了"DEFAULT_VIBRATE",则这个属性将覆盖vibrate字段中定义的振动 |
032 | */ |
033 | /* |
034 | * 添加LED灯提醒 |
035 | * notification.defaults |= Notification.DEFAULT_LIGHTS; |
036 | * 或者可以自己的LED提醒模式: |
037 | * notification.ledARGB = 0xff00ff00; |
038 | * notification.ledOnMS = 300; //亮的时间 |
039 | * notification.ledOffMS = 1000; //灭的时间 |
040 | * notification.flags |= Notification.FLAG_SHOW_LIGHTS; |
041 | */ |
042 | /* |
043 | * 更多的特征属性 |
044 | * notification.flags |= FLAG_AUTO_CANCEL; //在通知栏上点击此通知后自动清除此通知 |
045 | * notification.flags |= FLAG_INSISTENT; //重复发出声音,直到用户响应此通知 |
046 | * notification.flags |= FLAG_ONGOING_EVENT; //将此通知放到通知栏的"Ongoing"即"正在运行"组中 |
047 | * notification.flags |= FLAG_NO_CLEAR; //表明在点击了通知栏中的"清除通知"后,此通知不清除, |
048 | * //经常与FLAG_ONGOING_EVENT一起使用 |
049 | * notification.number = 1; //number字段表示此通知代表的当前事件数量,它将覆盖在状态栏图标的顶部 |
050 | * //如果要使用此字段,必须从1开始 |
051 | * notification.iconLevel = ; // |
052 | */ |
053 | //设置通知的事件消息 |
054 | Context context = getApplicationContext(); //上下文 |
055 | CharSequence contentTitle = "My Notification" ; //通知栏标题 |
056 | CharSequence contentText = "Hello World!" ; //通知栏内容 |
057 | Intent notificationIntent = new Intent( this ,Main. class ); //点击该通知后要跳转的Activity |
058 | PendingIntent contentIntent = PendingIntent.getActivity( this , 0 ,notificationIntent, 0 ); |
059 | notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); |
060 | //把Notification传递给 NotificationManager |
061 | mNotificationManager.notify( 0 ,notification); |
062 | 如果想要更新一个通知,只需要在设置好notification之后,再次调用 setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。 |
063 | ( 2 )、使用自定义的 Notification |
064 | 要创建一个自定义的Notification,可以使用RemoteViews。要定义自己的扩展消息,首先 要初始化一个RemoteViews对象,然后将它传递给Notification的contentView字段,再把PendingIntent传递给 contentIntent字段。以下示例代码是完整步骤: |
065 | //1、创建一个自 定义的消息布局 view.xml |
066 | <?xml version= "1.0" encoding= "utf-8" ?> |
067 | <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" |
068 | android:layout_width= "fill_parent" android:layout_height= "fill_parent" > |
069 | <ImageView android:id= "@+id/image" android:layout_width= "wrap_content" |
070 | android:layout_height= "fill_parent" android:layout_marginRight= "10dp" /> |
071 | <TextView android:id= "@+id/text" android:layout_width= "wrap_content" |
072 | android:layout_height= "fill_parent" android:textColor= "#000" /> |
073 | </LinearLayout> |
074 | //2、 在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段 |
075 | RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view); |
076 | contentView.setImageViewResource(R.id.image,R.drawable.icon); |
077 | contentView.setTextViewText(R.id.text,”Hello, this message is in a custom expanded view”); |
078 | notification.contentView = contentView; |
079 | //3、 为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要 setLatestEventInfo()方法) |
080 | Intent notificationIntent = new Intent( this ,Main. class ); |
081 | PendingIntent contentIntent = PendingIntent.getActivity( this , 0 ,notificationIntent, 0 ); |
082 | notification.contentIntent = contentIntent; |
083 | //4、发送通知 |
084 | mNotificationManager.notify( 2 ,notification); |
085 | // 以下是全部示例代码 |
086 | //创建一个 NotificationManager的引用 |
087 | String ns = Context.NOTIFICATION_SERVICE; |
088 | NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns); |
089 | // 定义Notification的各种属性 |
090 | int icon = R.drawable.icon; //通知图标 |
091 | CharSequence tickerText = "Hello" ; //状态栏显示的通知文本提示 |
092 | long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示 |
093 | //用上面的属性初始化 Nofification |
094 | Notification notification = new Notification(icon,tickerText,when); |
095 | RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view); |
096 | contentView.setImageViewResource(R.id.image, R.drawable.iconempty); |
097 | contentView.setTextViewText(R.id.text, "Hello,this is JC" ); |
098 | notification.contentView = contentView; |
099 | Intent notificationIntent = new Intent( this ,Main. class ); |
100 | PendingIntent contentIntent = PendingIntent.getActivity( this , 0 ,notificationIntent, 0 ); |
101 | notification. |