Aplikasi saya memiliki notifikasi, yang - jelas - tanpa tanda, memulai aktivitas baru setiap kali jadi saya mendapatkan beberapa aktivitas yang sama berjalan di atas satu sama lain, yang hanya salah.
Yang ingin saya lakukan adalah membawa aktivitas yang ditentukan dalam pemberitahuan menunggu keputusan, ke depan jika sudah berjalan, jika tidak, mulailah.
Sejauh ini, niat / niat menunggu untuk pemberitahuan yang saya miliki adalah
private static PendingIntent prepareIntent(Context context) {
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
dan anehnya, kadang-kadang berhasil, kadang tidak ... Saya merasa seperti saya sudah mencoba setiap kombinasi bendera.
onNewIntent
dan mengatur bendera)Saya pikir cara terbaik untuk melakukannya dan secara sederhana adalah memulai aktivitas secara normal, tetapi atur aktivitas itu dalam manifes dengan
singleInstance
properti. Dengan ini, Anda secara praktis mendekati kedua masalah yang Anda alami saat ini, dengan membawa aktivitas ke depan sepanjang waktu, dan membiarkan OS secara otomatis membuat yang baru jika tidak ada aktivitas atau membawa ke depan aktivitas yang saat ini ada (berkatsingleInstance
Properti).Ini adalah cara aktivitas dinyatakan sebagai satu kejadian:
Juga untuk menghindari animasi berombak ketika diluncurkan melalui singleInstance, Anda bisa menggunakan "singleTask", keduanya sangat mirip tetapi perbedaannya dijelaskan di sini sesuai dokumentasi Google:
Semoga ini membantu.
Salam!
sumber
Saya pikir apa yang Anda butuhkan ada dalam
singleTop
Activity
, daripada asingleTask
atausingleInstance
.Apa yang dikatakan dokumentasi tidak sesuai dengan kebutuhan Anda:
Selain itu (tidak ada permainan kata-kata yang dimaksudkan), saya memiliki kebutuhan yang persis sama dengan Anda. Saya menguji semua
launchMode
flag untuk mengetahui bagaimana mereka sebenarnya berperilaku dalam praktek dan sebagai hasilnyasingleTop
sebenarnya yang terbaik untuk ini: tidak ada animasi aneh, aplikasi ditampilkan sekali dalam daftar aplikasi terbaru (tidak sepertisingleInstance
yang menampilkannya dua kali karena kenyataannya tidak ' t izinkan orang lainActivity
untuk menjadi bagian dari tugasnya), dan lakukan dengan benar terlepas dari target yangActivity
sudah ada atau tidak.sumber
Ini adalah utas lama, tetapi bagi semua yang masih mencari jawaban, inilah solusi saya. Ini murni dalam kode, tanpa pengaturan nyata:
Di sini FLAG_ACTIVITY_SINGLE_TOP membuka aktivitas yang ada jika berada di bagian atas tumpukan tugas. Jika tidak di atas, tetapi di dalam tumpukan, FLAG_ACTIVITY_CLEAR_TOP akan menghapus semua aktivitas di atas aktivitas target dan menunjukkannya. Jika aktivitas tidak ada di tumpukan tugas, yang baru akan dibuat. Poin yang sangat penting untuk disebutkan - parameter kedua dari PendingIntent.getActivity (), yaitu requestCode harus memiliki nilai bukan nol (saya bahkan menyebutnya NON_ZERO_REQUEST_CODE dalam cuplikan saya), jika tidak, bendera niat tersebut tidak akan berfungsi. Saya tidak tahu mengapa seperti itu. Tandai FLAG_ACTIVITY_SINGLE_TOP dapat dipertukarkan dengan android: launchMode = "singleTop" dalam tag aktivitas dalam manifes.
sumber
Saya tahu ini sudah tua, tetapi tidak ada dari atas yang cocok untuk aplikasi saya.
Tanpa mengubah manifes dan konfigurasi lainnya, berikut adalah kode untuk membawa aplikasi Anda kembali ke depan - atau membukanya saat ditutup
sumber
Saya mencoba ini, dan itu berhasil meskipun IDE mengeluh tentang kode
sumber
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
bukan bendera yang valid untukPendingINtent.getActivity
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
bukan merupakan flag yang valid ketika digunakan sebagai aPendingIntent
. Atau mungkin Anda bermaksud tidak valid untuk masuk kegetActivity
metode, tetapi apakah valid untuk digunakan sebagaiIntent
flag yang kemudian digunakan sebagaiPendingIntent
?Karena Anda mengatakan ingin memulai aktivitas jika belum dimulai, mungkin Anda tidak keberatan memulai kembali. Saya menguji banyak saran dan kombinasi bendera untuk maksud juga, ini akan selalu membawa aktivitas yang Anda butuhkan ke depan, meskipun itu tidak akan membuat negara yang sebelumnya terkait dengannya.
Hanya API11 +.
sumber
Saya memiliki masalah serupa setelah menambahkan pemberitahuan seperti yang ditemukan di situs pelatihan android . Tidak ada jawaban lain di sini yang berfungsi untuk saya, namun jawaban ini berhasil untuk saya. Ringkasan:
sumber