美文网首页android
Android---通知notification之捕获点击

Android---通知notification之捕获点击

作者: HPD_黄霹雳 | 来源:发表于2018-01-16 17:38 被阅读0次

    之前写了一篇关于notification通知的文章
    链接:https://www.jianshu.com/p/ba8e6a4f023c

    如果要捕获通知的点击,要怎么办。监听通知点击事件,没有对应的API。

    做法就是通过广播。
    上一篇文章是通过PendingIntent.getActivity来创建PendingIntent,配置intent可以直接跳转activity。现在通过PendingIntent.getBroadcast来创建PendingIntent。当点击了这个通知,会发送一个广播,我们可以通过静态注册对应的广播接受者来接受,然后自己处理逻辑。

    步骤1:写广播类以及静态注册
    public class NotificationBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            
            UMUtils.getInstace()._frequency(context, "id_121");
            Bundle bundle = intent.getExtras();
            Class activity = (Class) bundle.getSerializable("class");
    
            Intent mIntent = new Intent(context, activity);
            mIntent.putExtras(bundle);
            mIntent.setFlags(
                    Intent.FLAG_ACTIVITY_NEW_TASK
                            | Intent.FLAG_ACTIVITY_CLEAR_TOP
            );
            context.startActivity(mIntent);
        }
    }
    

    在AndroidManifest注册

     <receiver android:name=".receivers.NotificationBroadcastReceiver"></receiver>
        
    
    步骤2:编写通知

    普通通知:

    /**
         * 显示普通通知
         *
         * @param mActivity
         * @param mBundle
         */
        private void showCommonNotification(Class<?> mActivity, Bundle mBundle, String title, String content) {
            NotificationCompat.Builder builder =
                    new NotificationCompat.Builder(context);
            builder.setSmallIcon(R.mipmap.app_icon);
    
            builder.setContentTitle(title);
            builder.setContentText(Html.fromHtml(content));
    
            builder.setAutoCancel(true).setDefaults(
                    NotificationCompat.DEFAULT_VIBRATE
                            | NotificationCompat.DEFAULT_SOUND
            );
    
            Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
            mBundle.putSerializable("class", mActivity);
            intent.putExtras(mBundle);
    
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            builder.setContentIntent(pendingIntent);
            Notification n = builder.build();
            NotificationManagerCompat managerCompat =
                    NotificationManagerCompat.from(context);
            managerCompat.notify((int) System.currentTimeMillis(), n);
        }
    

    横幅通知:

    
        /**
         * 显示横幅通知
         *
         * @param mActivity
         * @param mBundle
         * @param
         */
        private void showHangup(Class<?> mActivity, Bundle mBundle, String title, String content) {
    
            NotificationManager manger = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
    
            builder.setContentTitle(title);
            builder.setContentText(Html.fromHtml(content));
    
            builder.setDefaults(NotificationCompat.DEFAULT_ALL);
            builder.setSmallIcon(R.mipmap.ielts_bro_app_icon);
    
            mBundle.putSerializable("class", mActivity);
    
            Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
            intent.putExtras(mBundle);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            builder.setContentIntent(pendingIntent);
            builder.setFullScreenIntent(pendingIntent, true);
            builder.setAutoCancel(true);
            Notification notification = builder.build();
            manger.notify((int) System.currentTimeMillis(), notification);
        }
    

    相关文章

      网友评论

        本文标题:Android---通知notification之捕获点击

        本文链接:https://www.haomeiwen.com/subject/bfpsoxtx.html