Android 通知:使用多个 setOnClickPendingIntent 时的错误

Android notification : bug when using multiple setOnClickPendingIntent

我遇到了一个奇怪的错误。

我收到了带有 3 个按钮的通知(返回、下一步、play/pause)。我想在启动服务的这三个按钮中的每一个上设置不同的 pendingIntent。这是我的代码:

    Intent playPauseIntent = new Intent(MyApp.mainActivity, NotificationService.class);
    playPauseIntent.putExtra("do_action", "play");
    contentView.setOnClickPendingIntent(R.id.notifPlayPauseImageView, PendingIntent.getService(MyApp.mainActivity, 0, playPauseIntent, PendingIntent.FLAG_UPDATE_CURRENT));            

    Intent nextRadioIntent = new Intent(MyApp.mainActivity, NotificationService.class);
    nextRadioIntent.putExtra("do_action", "next");
    contentView.setOnClickPendingIntent(R.id.notifNextImageView, PendingIntent.getService(MyApp.mainActivity, 0, nextRadioIntent, PendingIntent.FLAG_UPDATE_CURRENT));

    Intent previousRadioIntent = new Intent(MyApp.mainActivity, NotificationService.class);
    previousRadioIntent.putExtra("do_action", "previous");
    contentView.setOnClickPendingIntent(R.id.notifPreviousImageView, PendingIntent.getService(MyApp.mainActivity, 0, previousRadioIntent, PendingIntent.FLAG_UPDATE_CURRENT));

    notification.contentView = contentView;
    mNotificationManager.notify(1, notification); 

然后,在我的服务中,我将 "do_action" 的意图和值定义为额外的:

@Override
public int onStartCommand(Intent intent,  int flags, int startId) { 

   if(intent != null && intent.getExtras() != null)
   {
      String action = (String) intent.getExtras().get("do_action"); // BUG HERE ! I always get "previous" !!!
   }       
}

错误在这里...当我得到 "do_action" 值时,我总是得到 "previous"(不仅当我点击上一个按钮时,当我点击播放或下一个时按钮)。

谁能帮我解决这个问题?

谢谢!

您为所有 Pendingintent 使用了相同的请求代码 0。您应该对不同的 PendingIntent 使用不同的 REQUEST_CODE:

PendingIntent.getService(MyApp.mainActivity, REQUEST_CODE, Intent, PendingIntent.FLAG_UPDATE_CURRENT)

试试这个:

Intent playPauseIntent = new Intent(MyApp.mainActivity, NotificationService.class);
playPauseIntent.putExtra("do_action", "play");
contentView.setOnClickPendingIntent(R.id.notifPlayPauseImageView, PendingIntent.getService(MyApp.mainActivity, 0, playPauseIntent, PendingIntent.FLAG_UPDATE_CURRENT));            

Intent nextRadioIntent = new Intent(MyApp.mainActivity, NotificationService.class);
nextRadioIntent.putExtra("do_action", "next");
contentView.setOnClickPendingIntent(R.id.notifNextImageView, PendingIntent.getService(MyApp.mainActivity, 1, nextRadioIntent, PendingIntent.FLAG_UPDATE_CURRENT));

Intent previousRadioIntent = new Intent(MyApp.mainActivity, NotificationService.class);
previousRadioIntent.putExtra("do_action", "previous");
contentView.setOnClickPendingIntent(R.id.notifPreviousImageView, PendingIntent.getService(MyApp.mainActivity, 2, previousRadioIntent, PendingIntent.FLAG_UPDATE_CURRENT));

notification.contentView = contentView;
mNotificationManager.notify(1, notification); 

希望对你有所帮助~