zoukankan      html  css  js  c++  java
  • android通知栏Notification点击,取消,清除响应事件

    主要是检测android通知栏的三种状态的响应事件

    这次在实现推送需求的时候,要用到android通知栏Notification点击后进入消息页面,因为要实现一个保存推送用户名字的功能,我在点击后处理了这个功能,但是测试发现我点击删除或者滑动清除后这个功能并没有执行,所以才意识到要处理删除和滑动清除的事件:

    首先实现一个BroadcastReceiver

    public class NotificationBroadcastReceiver extends BroadcastReceiver {
    
        public static final String TYPE = "type"; //这个type是为了Notification更新信息的,这个不明白的朋友可以去搜搜,很多
        
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            int type = intent.getIntExtra(TYPE, -1);
    
            if (type != -1) {
                NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.cancel(type);
            }
    
            if (action.equals("notification_clicked")) {
                //处理点击事件
            }
            
            if (action.equals("notification_cancelled")) {
                //处理滑动清除和点击删除事件
            }
        }
    }

    而注册Notification是这样的:

    Intent intentClick = new Intent(this, NotificationBroadcastReceiver.class);
    intentClick.setAction("notification_clicked");
    intentClick.putExtra(NotificationBroadcastReceiver.TYPE, type);
    PendingIntent pendingIntentClick = PendingIntent.getBroadcast(this, 0, intentClick, PendingIntent.FLAG_ONE_SHOT);
    
    Intent intentCancel = new Intent(this, NotificationBroadcastReceiver.class);
    intentCancel.setAction("notification_cancelled");
    intentCancel.putExtra(NotificationBroadcastReceiver.TYPE, type);
    PendingIntent pendingIntentCancel = PendingIntent.getBroadcast(this, 0, intentCancel, PendingIntent.FLAG_ONE_SHOT);
    
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(getString(R.string.setting_gcm_title))
            .setContentText(message)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntentClick)
            .setDeleteIntent(pendingIntentCancel);
    
    notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(type /* ID of notification */, notificationBuilder.build());  //这就是那个type,相同的update,不同add
     

    当然不要忘了在AndroidManifest.xml里面注册

    <receiver android:name=".gcm.NotificationBroadcastReceiver">
        <intent-filter>
            <action android:name="notification_cancelled"/>
            <action android:name="notification_clicked"/>
        </intent-filter>
    </receiver>

    这样就是初步实现了android通知栏Notification点击,取消,清除响应事件

  • 相关阅读:
    前端攻城狮学习笔记九:让你彻底弄清offset
    JavaScript中Element与Node的区别,children与childNodes的区别
    JavaScript代码优化实战之一:缓存变量,关键字过滤
    【转】纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等),NB么
    包装对象——JavaScript中原始类型拥有属性的原因
    关于两个容积不同的瓶子中装水可以得到哪些精确值的问题的算法
    JavaScript中判断鼠标按键(event.button)
    累了休息一会儿吧——分享一个JavaScript版扫雷游戏
    用CSS让未知高度内容垂直方向居中
    空间换时间,把递归的时间复杂度降低到O(2n)
  • 原文地址:https://www.cnblogs.com/qianyukun/p/5946792.html
Copyright © 2011-2022 走看看