В моем приложении на устройстве под управлением «Пирог» я запускаю уведомление с повторным действием при сбое задания (yigit / android-priority-jobqueue). кнопка действия «Попробовать еще раз» вызывает получателя широковещательной рассылки onReceive, как и ожидалось, и имя действия правильное, но дополнительные функции не имеют значения. Каналы были созданы также.
Код уведомления следующий:
NotificationManager manager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
int notificationId = 123;
Intent intent = new Intent(getApplicationContext(), MyReceiver.class);
PendingIntent contentPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
Intent tryAgainIntent = new Intent(getApplicationContext(), MyReceiver.class);
tryAgainIntent.setAction(TRY_AGAIN_ACTION);
tryAgainIntent.putExtra(Extras.POST_ID, postId);
PendingIntent tryAgainPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, tryAgainIntent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "com.example.android.GENERAL_NOTIFICATIONS")
.setSmallIcon(R.drawable.ic_logo)
.setContentTitle("Post sync failed")
.setContentText("Syncing the post failed")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setWhen(System.currentTimeMillis())
.setStyle(new NotificationCompat.BigTextStyle()
.bigText("Syncing the post failed, try again?"))
.setContentIntent(contentPendingIntent)
.addAction(R.drawable.ic_logo, "Try Again", tryAgainPendingIntent)
.setAutoCancel(true);
// send the notification
manager.notify(notificationId, builder.build());
Мой приемник выглядит следующим образом:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Bundle extras = intent.getExtras();
if(TRY_AGAIN_ACTION.equals(action)) {
// gets here fine
Long postId = intent.getLongExtra(Extras.POST_ID, -1);
// postId is always -1
Long postId = (Long) extras.get(Extras.POST_ID);
// postId is always -1 here also
}
}
}
Моя запись в манифесте:
<receiver
android:name=".receivers.MyReceiver"
android:exported="false">
<intent-filter>
<action android:name="TRY_AGAIN_ACTION" />
</intent-filter>
</receiver>
Я озадачен, почему все это работает, за исключением того, что дополнительные функции в приемнике являются нулевыми, какие-либо предложения?