Notification使用
2015-10-28 17:58
549 查看
如果图片不能显示 请点击这里
Notification一些基本用法 根据四个需求来普通的查看 跳转页面
查看后返回某个固定页面的意图
我们自己的APP的通知 查看之后回到我们APP的首页 或者连续几页返回
新建一个Task 用来查看 返回上一个最近任务栈
查看之后 回到之前正在进行的任务 效果上感觉这个和普通的没什么差别 这个就是新建一个task专门来处理查看通知的操作
自定义View的Notification
notification对象的构建
低版本的就不说了 这里用Build构造notification的管理类 notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); builder = new NotificationCompat.Builder(this); builder.setContentInfo("info"); builder.setContentTitle("title"); builder.setContentText("下载进度"); builder.setSmallIcon(R.mipmap.collention); //构建 发出通知 Notification notification = builder.build(); notificationManager.notify(0, notification);
1 普通的跳转 就是在构建notification对象的时候塞入一个Intent 这里叫PendingIntent 延迟意图
Intent resultIntent1 = new Intent(this, Main2Activity.class); //这个用于下面的 在发送通知时判断是否存在 因为设置的是PendingIntent.FLAG_UPDATE_CURRENT int requestCode1 = (int) SystemClock.uptimeMillis(); PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT); changeIntent(pendingIntent);
PendingIntent.FLAG_UPDATE_CURRENT**这个参数一般有四种选择分别是:
FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。 FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,那么 系统将不会重复创建,只是把之前不同的传值替换掉。(所以这里如果值不变 是不是有变化的 以致于会出现一些问题 通常做法就是在构建PendingIntent的时候传入不一样的requestCode来改变 更新PendingIntent 一般都是用这个)
使用代码如下 效果如图
Intent resultIntent1 = new Intent(this, Main4Activity.class); int requestCode1 = (int) SystemClock.uptimeMillis(); PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); Notification notification = builder.build(); notificationManager.notify(0, notification);
发现 在当前页面查看通知后返回还是在当前页面 退出程序之后 在主菜单查看通知 返回的是主菜单
2 回退到固定的页面 这里做一些配置
清单文件的配置 指明parentActivity 和TaskStackBuilder
<activity android:name=".Main2Activity" android:excludeFromRecents="true" android:launchMode="singleTask" //指定当前Activity的返回的上一个页面 android:parentActivityName=".MainActivity" android:taskAffinity="" > //兼容低版本 <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> //配置同上 <activity android:name=".Main3Activity" android:parentActivityName=".Main2Activity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".Main2Activity" /> </activity> Intent resultIntent = new Intent(this, Main3Activity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(Main3Activity.class); stackBuilder.addNextIntent(resultIntent); int requestCode = (int) SystemClock.uptimeMillis(); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(requestCode, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(resultPendingIntent ); Notification notification = builder.build(); notificationManager.notify(0, notification);
效果图
#### 只要查看通知 返回顺序都是 指定要其parentActivity的页面
3:新开任务栈 的方式
效果就不看了 看看如何配置吧
<activity android:name=".Main2Activity" //清除最近列表的记录 android:excludeFromRecents="true" //新开任务栈 启动模式 android:launchMode="singleTask" android:parentActivityName=".MainActivity" //这个要写 不然会有问题 不然没效果 我不太清楚这个有什么用 后续在了解 android:taskAffinity="" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> Intent notifyIntent = new Intent(this, Main2Activity.class); notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); int requestCode2 = (int) SystemClock.uptimeMillis(); PendingIntent pendIntent = PendingIntent.getActivity(this, requestCode2, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendIntent ); Notification notification = builder.build(); notificationManager.notify(0, notification);
4 自定义通知界面
NotificationCompat.Builder builder1 = new NotificationCompat.Builder(this); RemoteViews remoteView = new RemoteViews(getPackageName(),R.layout.remote); remoteView.setTextViewText(R.id.text, "DaemonLiu"); remoteView.setImageViewResource(R.id.image, R.mipmap.collention); builder1.setSmallIcon(R.mipmap.collention); builder1.setContent(remoteView); Intent resultIntent4 = new Intent(this, Main4Activity.class); int requestCode4 = (int) SystemClock.uptimeMillis(); PendingIntent pendingIntent4 = PendingIntent.getActivity(this, requestCode4, resultIntent4, PendingIntent.FLAG_UPDATE_CURRENT); remoteView.setOnClickPendingIntent(R.id.image,pendingIntent4); builder.setContentIntent(pendingIntent4); Notification notification = builder1.build(); notificationManager.notify(1, notification);
效果图 自定义通知页面 然后再image上面附加事件 点击后跳转
在关于进度条的设置 上面第一张图有进度条 代码如下
**new Thread(new Runnable() { @Override public void run() { int incr; for (incr = 0; incr <= 100; incr += 5) { // mBuilder.setProgress(100, incr, false); builder.setProgress(100, incr, false); builder.setContentText("下载进度"+incr+"%"); notificationManager.notify(0, builder.build()); try { Thread.sleep(300); } catch (InterruptedException e) { } } builder.setContentText("Download complete").setProgress(0, 0, false); notificationManager.notify(0, builder.build()); } } // Starts the thread by calling the run() method in its Runnable ).start();**
这里只是简单记录下notification的简单的使用 关于notification的更多详细介绍 4.0之后的 三种style形式等等 贴上一个地址 觉得写得挺详细的
http://blog.csdn.net/xy_nyle/article/details/19853591
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories