Android通知栏点击事件
来源:互联网 发布:二维数组初始化为空 编辑:程序博客网 时间:2024/06/06 21:39
最近在做一个混合开发项目,给本地通知栏发送消息,并且在点击通知栏时不去跳转到某一activity界面,而是通过cordova调用js事件。
大致可将这个问题分成三个部分来解决:
1.给本地通知栏发送消息
2.获取通知栏点击事件
3.通过cordova调用js
一、首先是给本地通知栏发送消息,此部分比较简单,直接上代码。
public void createNotification(Context ctx, PendingIntent intent, int id) { NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = null; //有两种方式来创建notification //一 notification = new Notification(icon, title, id); notification.setLatestEventInfo(ctx, title, content,intent); //二 Notification.Builder builder = new Notification.Builder(ctx); builder.setContentText("title"); // 下拉通知栏内容 builder.setContentTitle("content");// 下拉通知栏标题 builder.setSmallIcon(icon);//通知栏图标 builder.setAutoCancel(true); builder.setContentIntent(intent); notification = builder.build(); nm.notify(id, notification);}
二、获取通知栏的点击事件,这里是本文的重点。
上面的代码大家应该能注意到,notification创建时需要传入一个PendingIntent类型的参数,这个参数就是用来处理点击通知之后的动作。与一般intent不同,PendingIntent是指在某条件适当的时机执行的动作,而不是立即执行。
PendingIntent当中有一个方法getBroadcast(),可以向外发出广播,因此我们可以借助该方法,在点击通知栏时发出广播并在onreceiver方法中处理相应逻辑
class MyReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { //处理相应逻辑 }}public void buildAction(Context ctx,Intent intent) { int id = (int)System.currentTimeMillis() / 10000; //这个getbroadcast方法和创建notifycation时都会用到一个id标示,一般都是统一的,但是我用不同值试过也是可以的 PendingIntent clickIntent = PendingIntent.getBroadcast(ctx, id,intent, PendingIntent.FLAG_UPDATE_CURRENT); createNotification(ctx,clickIntent,id);}
接下来就是将广播放入PendingIntent当中了,同时还要注册广播,最开始我的写法时参照网上的写法:
IntentFilter filter = new IntentFilter();filter.addAction(MY_ACTION);args.getUMActivity().registerReceiver(new MyReceiver(), filter);Intent intent = new Intent(ctx, MyReceiver.class);intent.setAction(MY_ACTION);
发现这样写无法触发广播,只能静态注册,网上查了半天也没有结果。后来一想既然调用了setAction方法注册了动作,并且有了intentfilter,为什么还要写一个new Intent(ctx,MyReceiver.class);这不是画蛇添足吗,之后改成如下方式:
public void run() { IntentFilter filter = new IntentFilter(MY_ACTION); args.getUMActivity().registerReceiver(new UMNotificationClickReceiver(), filter); Intent intent = new Intent(MY_ACTION); buildAction(this,intent);}
一运行,哈哈,OK
第三部分用cordova调用js就不细说了,与本文无关,有兴趣的同学可以去网上学习一下混合开发!
阅读全文
0 0
- Android通知栏点击事件
- 通知栏,点击事件!
- android DownloadManager广播事件:下载完成、通知栏点击事件
- Android通知栏点击通知消失
- 自定义通知栏,并注册点击事件
- Android 通知栏点击取消
- Android 点击通知栏 跳转
- 点击通知栏中推送通知的触发事件
- android通知栏响应事件
- 通知以及其点击事件
- Android缩小到通知栏,再点击通知栏启动
- Android 点击通知栏中的通知启动应用
- Android实现点击通知栏通知恢复前台
- android 通知栏添加按钮点击效果
- Android 点击通知栏跳转到应用程序
- Android 通知栏Notification点击跳转无效
- Android自定义通知栏及响应通知栏事件
- android 发送通知栏通知的灵异事件
- jsp实现Excel文件导入到MySQL数据库中
- 解析动态代理
- pyspark中combineByKey的两种理解方法
- UVA 10006
- 欢迎使用CSDN-markdown编辑器
- Android通知栏点击事件
- 无缝滚动
- JUC锁-07之 LockSupport
- POJ 3070
- JUC锁-09之 CountDownLatch原理和示例
- Freemarker基础知识
- Shiro基础知识
- bzoj 4033: [HAOI2015]树上染色(树形DP)
- Python:丑数