我正在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
.这是怎么回事?我很难过.
您应该将图标设置为第一个参数,而不是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))