Android 监听Notification 被清除实例代码

简介: Android 监听Notification 被清除实例代码
public class NotifiDoWhatReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null || context == null) {
            return;
        }
        String action = intent.getAction();
        if(action.equals(NOTIFICATION_DELETED_ACTION)){
            int type = intent.getIntExtra(PUSH_TYPE,-1);
            int notiid  = intent.getIntExtra(PUSH_ID,-1);
            String url = intent.getStringExtra(Constant.DATA);
            if(type==0){
                //apk下载
                ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(notiid);
                if(downCalls.containsKey(url)){
                    downCalls.remove(url);
                }
            }
        }
    }
 
}
 public void initNotification() {
        builder = new NotificationCompat.Builder(mContext)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentText("0%")
                .setContentTitle("初心客厅")
                .setProgress(100, 0, false).setDeleteIntent(PendingIntent.getBroadcast(this, NOTIFICATION_ID_APK,
     new Intent(NOTIFICATION_DELETED_ACTION).putExtra(PUSH_ID, NOTIFICATION_ID_APK).putExtra(PUSH_TYPE, 0).putExtra(Constant.DATA, url), 0));
        notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID_APK, builder.build());
    }

参考资料


private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
 
 @Override
 public void onReceive(Context context, Intent intent) {
  if (intent == null || context == null) {
   return;
  }
 
  mNotificationManager.cancel(NOTIFICATION_ID_LIVE);
 
  String type = intent.getStringExtra(PUSH_TYPE);
  if (PUSH_TYPE_LINK.equals(type)) {
   //mNumLinkes = 0;
  } else if (PUSH_TYPE_LIVE.equals(type)) {
   //mNumLives = 0;
  }
  //这里可以重新计数
 }
};
 
 
private void sendLiveNotification() {
 Intent intent = new Intent(NOTIFICATION_CLICK_ACTION);
 
 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
 
 String title = "Push测试";
 mBuilder.setContentTitle(title);
 mBuilder.setTicker(title);
 mBuilder.setContentText("https://233.tv/over140");
 mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
 mBuilder.setSmallIcon(R.drawable.ic_action_cast);
 mBuilder.setDefaults(Notification.DEFAULT_ALL);
 mBuilder.setWhen(System.currentTimeMillis());
 mBuilder.setContentIntent(PendingIntent.getBroadcast(this, NOTIFICATION_ID_LIVE, intent, 0));
 mBuilder.setDeleteIntent(PendingIntent.getBroadcast(this, NOTIFICATION_ID_LIVE, new Intent(NOTIFICATION_DELETED_ACTION).putExtra(PUSH_TYPE, PUSH_TYPE_LIVE), 0));
 
 mNotificationManager.notify(NOTIFICATION_ID_LIVE, mBuilder.build());
}

代码说明


 1、最重要的是setDeleteIntent,这个在API Level 11(Android 3.0) 新增的


 2、注意不要设置setAutoCancel为true,否则监听器接收不到


 3、这里统一了点击通知和消除通知的操作


 4、注意广播在推送前要注册好

实际使用中发现还是有一点问题,比如Service被Kill掉了,通知栏点击就会没有反应了,这块还需要再考虑一下,比如把Broadcast在AndroidMainfest中监听。


以上就是对Android Notification 事件的资料整理,希望能帮助Android开发的朋友。


相关文章
|
26天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
22 1
|
1月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
2月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
28 2
|
3月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
36 3
|
3月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
100 2
|
4月前
|
监控 Android开发 开发者
Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
40 2
|
4月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
【7月更文挑战第28天】在Android开发中,每位开发者都追求极致的用户体验。然而,“代码执行慢”的问题时常困扰着开发者。通过案例分析,我们可探索从新手到高手的成长路径。
40 3
|
3月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
38 0
|
5月前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
89 2
|
5月前
|
安全 Java Android开发
使用Unidbg进行安卓逆向实例讲解
使用Unidbg进行安卓逆向实例讲解
132 2