android notification 点击弹出一个dialog,并把其中的消息传递过去

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android notification 点击弹出一个dialog,并把其中的消息传递过去相关的知识,希望对你有一定的参考价值。

dialog已经做出来了,现在就是把通知中的消息,在dialog的textview里显示出来

可以通过跳转activity的方式,将activity做成dialog的样子,然后通过intent和pendingintent去传递参数

// 设置通知的事件消息 
CharSequence contentTitle ="标题"; // 通知栏标题  
CharSequence contentText ="内容"; // 通知栏内容  
//如果需要跳转到指定的Activity,则需要设置PendingIntent
Intent notificationIntent =new Intent(A.this, B.class); 
// 点击该通知后要跳转的Activity  
notificationIntent.putExtra("date","需要传递的参数");
// FLAG_UPDATE_CURRENT 更新数据,如果有多个PendingIntent,且requestCode相同,则会替换为最新extra数据
//如果需要通过不同的extra数据,进行处理,就需要requestCode不相同
int requestCode = new Random().nextInt();
PendingIntent contentItent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);      
notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);  
// 把Notification传递给NotificationManager  
notificationManager.notify(0, notification);

参考技术A 点击弹出一个

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点击,取消,清除响应事件

以上是关于android notification 点击弹出一个dialog,并把其中的消息传递过去的主要内容,如果未能解决你的问题,请参考以下文章

Android学习笔记二十之Toast吐司Notification通知PopupWindow弹出窗

android 设置整个app的通知栏Notification 的声音和震动用啥方法

android Notification 点击事情无响应的注意事项

android通知栏Notification点击,取消,清除响应事件

android 自定义带按钮的Notification及点击事件和伸缩通知栏

Python Notification Popup消失了