Действие уведомления Android pendingIntent запускает получателя, но дополнения о намерениях получателя пусты - PullRequest
0 голосов
/ 09 января 2019

В моем приложении на устройстве под управлением «Пирог» я запускаю уведомление с повторным действием при сбое задания (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>

Я озадачен, почему все это работает, за исключением того, что дополнительные функции в приемнике являются нулевыми, какие-либо предложения?

...