当前位置:  开发笔记 > 编程语言 > 正文

Android通知操作 - Intent Extra未按预期工作

如何解决《Android通知操作-IntentExtra未按预期工作》经验,为你挑选了1个好方法。

我正在notification用多个动作创建一个.我正在用它broadcast intents来表达一个被推动并采取具体行动的人.有4个按钮,我创建了4个单独的意图.每个都有相同的Action字符串,但不同StringExtra.

Intent intNow = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NOW);
    Intent intEmail = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_EMAIL);
    Intent intLater = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_LATER);
    Intent intNever = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NEVER);

    Notification.Builder myRatingNotification = new Notification.Builder(mThis)
            .setContentTitle(title)
            .setContentText(text)
            .setSmallIcon(R.mipmap.ic_launcher)
            .addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 0, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 0, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 0, intNever, PendingIntent.FLAG_UPDATE_CURRENT))
            .setAutoCancel(true);

    Notification notification = new Notification.BigTextStyle(myRatingNotification).bigText(text).build();
    ((NotificationManager) mThis.getSystemService(Context.NOTIFICATION_SERVICE)).notify(notificationId, notification);

因此,通知已成功创建.按钮在那里.但无论我推动哪一个,传递给它的额外receiver内容始终是最后定义的动作.也就是说,在上面的例子中,每个按钮返回一个等于的字符串Extra ACT_NEVER.如果我重新排序,.addAction 那么intLater是最后一个,接收器告诉我String Extra等于ACT_LATER,无论我按哪个按钮.

我无法弄清楚为什么 - 这四个Intents完全相互独立.操作指定正确Intent.这是怎么回事?我很难过.



1> starkshang..:

    您应该将图标设置为第一个参数,而不是0.

    你当前的结果,因为你使用相同的动作和相同的requestCode构建一个PendingIntent,所以4 PendingIntent将是相同的,你使用PendingIntent.FLAG_UPDATE_CURRENT,所以最后一个PendingIntent的额外将替换pre one.

所以要解决你的问题,你只需要requestCode为四个设置不同PendingIntent,如下所示:

.addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 1, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 2, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 3, intNever, PendingIntent.FLAG_UPDATE_CURRENT))


而已!使用不同的RequestCode就可以了.不知何故,我的印象是RequestCode没有被使用,因为没有办法从被调用的类访问它.谢谢!
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有