Saya ingin memiliki satu aplikasi yang berjalan di latar belakang, yang mengetahui kapan salah satu aplikasi bawaan (olahpesan, kontak, dll) sedang berjalan.
Jadi pertanyaan saya adalah:
Bagaimana saya harus menjalankan aplikasi saya di latar belakang.
Bagaimana aplikasi latar belakang saya dapat mengetahui aplikasi apa yang sedang berjalan di latar depan.
Tanggapan dari orang-orang yang berpengalaman akan sangat kami hargai.
Jawaban:
Berkenaan dengan "2. Bagaimana aplikasi latar belakang saya dapat mengetahui aplikasi apa yang sedang berjalan di latar depan."
JANGAN menggunakan
getRunningAppProcesses()
metode ini karena ini mengembalikan semua jenis sampah sistem dari pengalaman saya dan Anda akan mendapatkan banyak hasil yang memilikinyaRunningAppProcessInfo.IMPORTANCE_FOREGROUND
. GunakangetRunningTasks()
sebagai gantinyaIni adalah kode yang saya gunakan dalam layanan saya untuk mengidentifikasi aplikasi latar depan saat ini, sangat mudah:
Itu saja, maka Anda dapat dengan mudah mengakses detail aplikasi / aktivitas latar depan:
Ini membutuhkan izin tambahan dalam menifest aktivitas dan bekerja dengan sempurna.
sumber
getRunningTasks()
tidak berlaku lagi di API 21 (Lollipop) - developer.android.com/reference/android/app/…saya harus mencari tahu solusi yang tepat dengan cara yang sulit. kode di bawah ini adalah bagian dari cyanogenmod7 (tablet tweak) dan diuji pada android 2.3.3 / gingerbread.
metode:
semoga ini menjawab masalah ini secara menyeluruh (:
sumber
mActivityManager.getRunningTasks(1).get(0).topActivity
?Coba kode berikut:
Nama proses adalah nama paket aplikasi yang berjalan di latar depan. Bandingkan dengan nama paket aplikasi Anda. Jika sama, maka aplikasi Anda berjalan di latar depan.
Saya harap ini menjawab pertanyaan Anda.
sumber
Dari lollipop dan seterusnya ini berubah. Silakan temukan kode di bawah ini, sebelum pengguna itu harus pergi ke Pengaturan -> Keamanan -> (Gulir ke bawah hingga terakhir) Aplikasi dengan akses penggunaan -> Berikan izin ke aplikasi kami
sumber
Untuk kasus ketika kita perlu memeriksa dari service / background-thread kita sendiri apakah aplikasi kita berada di latar depan atau tidak. Ini adalah cara saya menerapkannya, dan berfungsi dengan baik untuk saya:
Sekarang untuk memeriksa dari kelas lain, apakah aplikasi berada di latar depan atau tidak, cukup panggil:
Pembaruan (seperti yang ditunjukkan oleh SHS ):
Jangan lupa untuk mendaftar callback dalam
onCreate
metode kelas Aplikasi Anda .sumber
Untuk menentukan aplikasi latar depan, Anda dapat menggunakan untuk mendeteksi aplikasi latar depan, Anda dapat menggunakan https://github.com/ricvalerio/foregroundappchecker . Ini menggunakan metode yang berbeda tergantung pada versi android perangkat.
Sedangkan untuk layanan, repo juga menyediakan kode yang Anda butuhkan. Pada dasarnya, biarkan android studio membuat layanan untuk Anda, lalu onCreate menambahkan cuplikan yang menggunakan appChecker. Namun, Anda perlu meminta izin.
sumber
Mempertimbangkan bahwa
getRunningTasks()
sudah usang dangetRunningAppProcesses()
tidak dapat diandalkan, saya mengambil keputusan untuk menggabungkan 2 pendekatan yang disebutkan di StackOverflow:sumber
Kelas ActivityManager adalah alat yang tepat untuk melihat proses mana yang sedang berjalan.
Untuk berjalan di latar belakang, Anda biasanya ingin menggunakan Service .
sumber
Ini berhasil untuk saya. Tapi itu hanya memberikan nama menu utama. Itu jika pengguna telah membuka Pengaturan -> Bluetooth -> layar Nama Perangkat, RunningAppProcessInfo menyebutnya hanya Pengaturan. Tidak dapat menelusuri lebih jauh
sumber
Lakukan sesuatu seperti ini:
sumber
Di lollipop dan lebih tinggi:
Tambahkan ke mainfest:
Dan lakukan sesuatu seperti ini:
sumber
Beginilah cara saya memeriksa apakah aplikasi saya ada di latar depan. Catatan Saya menggunakan AsyncTask seperti yang disarankan oleh dokumentasi resmi Android.`
`
dan jalankan AsyncTask seperti ini.
new CheckIfForeground().execute();
sumber
Saya menggabungkan dua solusi dalam satu metode dan itu bekerja untuk saya untuk API 24 dan untuk API 21. Lainnya saya tidak menguji.
Kode di Kotlin:
dan di Manifest
sumber