public class MainActivity extends AppCompatActivity {

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Toast.makeText(this, "onNewIntent", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent a = new Intent(this, MainActivity.class);
        Intent b = new Intent(this, MainActivity.class);
        b.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pia = PendingIntent.getActivity(this, 1, a, 0);
        PendingIntent pib = PendingIntent.getActivity(this, 1, b, PendingIntent.FLAG_UPDATE_CURRENT);
        try {
            pib.send();
        } catch (PendingIntent.CanceledException e) {
            e.printStackTrace();
        }
    }

}

Dengan kode di atas, saat Aktivitas dimulai, alih-alih roti panggang "onNewIntent" muncul, MainActivity baru dipanggil, mengabaikan tanda FLAG_ACTIVITY_SINGLE_TOP.

Tetapi jika saya mengubah FLAG_UPDATE_CURRENT menjadi FLAG_CANCEL_CURRENT, masalah terpecahkan.

Apakah ini bug dari Android? Saya menguji ini pada emulator yang menjalankan Android Pie.

Apakah ada cara untuk memperbarui bendera PendingIntent?

1
ZumiKua 13 Maret 2019, 12:39

1 menjawab

Jawaban Terbaik

Saat Anda menggunakan PendingIntent.FLAG_UPDATE_CURRENT ini hanya menyebabkan "ekstra" di Intent diperbarui. Itu tidak melakukan apa pun pada flag Intent.

Jika Anda ingin mengubah flag Intent, Anda harus menggunakan 2 PendingIntent yang berbeda (misalnya dengan menggunakan requestCode yang berbeda), atau Anda perlu membatalkan PendingIntent dan buat yang baru.

1
David Wasser 14 Maret 2019, 18:52