Notification--通知
来源:互联网 发布:php博客聊天源码 编辑:程序博客网 时间:2024/05/22 08:08
Notification是一种在你APP常规UI外用来指示某个事件发生的用户交互元素。用户可以在使用其它apps时查看notification,并在方便的时候做出回应。
通过builder来构造通知显示内容,用PendingIntent 来构造点击通知的响应事件,builder.setContentIntent(pendingIntent);添加到builder中
manager.notify(id,notification);//notification=builder.build();
通知的消失:
每条通知都有一个指定的id,id相同会更新,id不同会发布另一条通知
manager.cancel();/manager.cancel(id);
builder.setOnGoing(true/false);//设置它在任务栏可否一直存在,true表示一存在,不会被清除
但是如果有builder.setAutoCancel(true);发生响应后 OnGoing(true)不会有效
分类:
1.常规通知
用到的类:
NotificationCompat.Builder = new NotificatoinCompat.Builder(context);
PendingIntent = PendingIntent.getActivity(context,id,intent);
NotificationManager = ()getSystemManager(NOTIFICATION_SERVERCE);//参数引用的封装好的“notification”
<span style="white-space:pre"><span style="font-size:14px;"></span></span><span style="font-size:14px;">NotificationCompat.Builder builder = new NotificationCompat.Builder(NotificationActivity.this);/* 通知内容 */builder.setSmallIcon(R.drawable.ic_launcher);//通知图标builder.setTicker("你有一条新消息");// 收到通知提示builder.setContentTitle("双十一大会场");// 通知的标题builder.setContentText("全场5折,欢迎抢购");// 通知内容// 通知信息的详细内容,威武text的右边,太长,text会显示不完全builder.setContentInfo("content info");</span>
<span style="font-size:14px;"><span style="white-space:pre"></span>builder.setSound(Uri.parse("file://mnt/sdcard/Adele - Someone Like You.mp3"));</span>
<span style="font-size:14px;">builder.setAutoCancel(true);// 响应后自动消失/* 通知行为 */Intent intent = new Intent(NotificationActivity.this,DefinedActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(NotificationActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);builder.setContentIntent(pendingIntent);// 发送通知</span>
<span style="font-size:14px;">NotificationManager manager = (NotificationManager) getSystemService("notification");manager.notify(NORMAL_NOTIFY_ID, builder.build());</span>
2.progress通知(进度条下载)
下面以确定性为例
builder.setProgress(max,progress,inderminate);//indeterminate:true 不确定性,false为确定性
加载完成之后,用builder.setProgress(0,0,false);
<span style="white-space:pre"></span><span style="font-size:14px;">NotificationCompat.Builder builder = new NotificationCompat.Builder(NotificationActivity.this);//构造内容builder.setSmallIcon(R.drawable.meituan_image6);builder.setTicker("正在下载...");builder.setContentTitle("下载通知");builder.setContentText("下载中");//线程模拟进度条的加载new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {builder.setProgress(100, i, false);manager.notify(11, builder.build());try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}//加载完成后进度天的消失builder.setProgress(0, 0, false);builder.setContentText("下载完成");//text的更新//NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.notify(11, builder.build());}</span>}).start();
3.导航通知
指点击某条通知,跳到一个界面后,按返回键会返回到你指定的一个父Activity,比如你有一条新短信,你点开后按返回键会回到短信列表
这个需要在manifest中声明层级关系
这里就要注意常规和特定activity的区别了
常规activity:是工作流的一部份
特定activity:只能从notification启动,才能看见//intent.setFlag(Intent.FLAG_ACTIVITY_NEWTASK|Intent.FLAG_CLEAR_ALL);
TaskStackBuilder taskBuilder = TaskStackBuilder.create(context);
taskBuilder.addParentStask( .class);//这个class就是intent里面的class
taskBuilder.addNextIntent(intent);
PendingIntent pendingIntent = taskBuilder.getPendingIntent(id,FLAG);
<span style="white-space:pre"><span style="font-size:14px;"></span></span><span style="font-size:14px;">builder.setSmallIcon(R.drawable.meituan_image8);builder.setTicker("你有一条导航通知");builder.setContentTitle("导航通知: 双十一大会场");builder.setContentText("全场5折,欢迎抢购");builder.setContentInfo("content info");builder.setAutoCancel(true);builder.setSound(Uri.parse("file://mnt/sdcard/Adele - Someone Like You.mp3"));intent = new Intent(this, DefinedActivity.class);TaskStackBuilder sBuilder = TaskStackBuilder.create(this);</span>
<span style="font-size:14px;"><span style="white-space:pre"></span>//注意:这里的的parentStack不是指返回的activity,sBuilder.addParentStack(DefinedActivity.class);sBuilder.addNextIntent(intent);PendingIntent pIntent = sBuilder.getPendingIntent(1,PendingIntent.FLAG_UPDATE_CURRENT);builder.setContentIntent(pIntent);manager = (NotificationManager) getSystemService("notification");manager.notify(GUIDE_NOTIFY_ID, builder.build());</span>
在响应的activity中声明他的父activity,
4.1以前是使用下列方法声明
<span style="font-size:14px;"><activity android:name="com.scxh.android.listview.DefinedActivity" android:label="自定义适配器" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity></span>
4.1以后
<span style="font-size:14px;"><activity android:name="com.scxh.android.listview.DefinedActivity"</span>
<span style="font-size:14px;"><span style="white-space:pre"></span> android:parentActivityName=".MainActivity"</span>
<span style="font-size:14px;"> android:label="自定义适配器"/> </span>
4.BigView通知( 4.1版本 后才有的)
builder.setStyle(new NotificationCompat.BigTextStyle().bigText("text"));//text:显示的内容
builder.addAction(int icon,"name",pendingIntent);
下面是与service进行了交互的代码
PendingIntent pendingIntent = PendingIntent.getService(context,id,FLAG);
builder.setSmallIcon(R.drawable.meituan_image1);
builder.setTicker("你有一条big消息");builder.setContentTitle("元旦");builder.setContentText("新年新气象,又该添新衣了");// builder.setAutoCancel(true);
builder.setStyle(new NotificationCompat.BigTextStyle().bigText("music"));//注意一定要给intent设置action,他传的参数才能被接收到Intent startIntent = new Intent(this, MusicService.class);startIntent.setAction("music_start");startIntent.putExtra("music_state", 0);// 0 palyingPendingIntent pStartIntent = PendingIntent.getService(this, 1,startIntent, PendingIntent.FLAG_UPDATE_CURRENT);Intent pauseIntent = new Intent(this, MusicService.class);pauseIntent.setAction("music_pause");pauseIntent.putExtra("music_state", 1);// 1 pausePendingIntent pPauseIntent = PendingIntent.getService(this, 1,pauseIntent, PendingIntent.FLAG_UPDATE_CURRENT);<span style="white-space:pre"></span>//点击开始,会执行pStartIntent的代码builder.addAction(R.drawable.ic_menu_user_on, "开始", pStartIntent);builder.addAction(R.drawable.ic_menu_user_off, "暂停", pPauseIntent);manager.notify(BIGVIEW_NOTIFY_ID, builder.build());
5.自定义通知
RemoteViews view = new RemoteViews(getPackageName(),layout);
监听 view.setOnClickPendingIntent(R.id.palying_btn, pendingIntent);
其他跟bigview处理一样
builder.setContent(view);
<span style="white-space:pre"></span>builder.setSmallIcon(R.drawable.meituan_image1);builder.setContentTitle("元旦");//将自定义布局转换成RemoteView,调用builder.setContent(view);注:通知是具有一定高度的,RemoteViews view = new RemoteViews(getPackageName(),R.layout.defined_notification_layout);//构造要某个view的响应事件Intent playIntent = new Intent(this, MusicService.class);playIntent.setAction("music_start");playIntent.putExtra("music_state", 0);// 0 palyingPendingIntent pPlayIntent = PendingIntent.getService(this, 1,playIntent, PendingIntent.FLAG_UPDATE_CURRENT);//对自定义通知布局中的一个button进行点击处理,view.setOnClickPendingIntent(R.id.palying_btn, pPlayIntent);Intent pauseIntent = new Intent(this, MusicService.class);pauseIntent.setAction("music_pause");pauseIntent.putExtra("music_state", 1);// 1 pausePendingIntent pPauseIntent = PendingIntent.getService(this, 1,pauseIntent, PendingIntent.FLAG_UPDATE_CURRENT);view.setOnClickPendingIntent(R.id.next_song_btn, pPauseIntent);builder.setContent(view);manager.notify(15, builder.build());break;
0 0
- Notification通知
- Notification通知
- Notification(通知)
- Notification通知
- Notification通知
- notification通知
- Notification 通知
- 通知(Notification)
- Notification通知
- 通知notification
- 通知Notification
- 通知 ------- Notification
- 通知Notification
- Notification--通知
- Notification通知
- 通知 notification
- 通知Notification
- Notification通知
- nyoj 找球号(三) 528 (位运算&&set)
- 超级终端连接开发板出现Please press Enter to activate this console的问题
- tomcat内存不足,一段时间后不响应了
- 字符串NSString和不可变字符串NSMutableString的基础知识
- stringBuffer 与StringBulider长度分析
- Notification--通知
- 基于opencv的相机之图片处理首页效果(六)
- OC语言NSDate的使用以及类的扩展
- 扯扯DNS解析的流程
- Debian系统apt-get命令整理修改更新源
- nyoj--86--找球号(一)(hash&&set&&二分)
- x的平方根(LintCode)
- hdu5093
- 树莓派从零安装物联网alljoyn环境