Asumsikan saya memiliki kode sumber AOSP, Bagaimana saya bisa menjeda APP di latar depan ketika menarik panel notifikasi? Saya telah mencari di Google dan menemukan aplikasi yang dapat mendengarkan acara onWindowFocusChange
dan mengambil tindakan secara proaktif, tetapi bagaimana saya bisa menjeda APLIKASI APAPUN ketika menarik ke bawah panel notifikasi, tanpa memodifikasi setiap aplikasi masing-masing (yang tidak praktis)?
Apakah ada cara agar saya dapat memanggil onPause
fungsi aplikasi latar depan apa pun dari proses SystemUI?
android
android-developer-api
zhangxaochen
sumber
sumber
Jawaban:
Anda dapat menggunakan metode di bawah ini untuk mendeteksi tarikan panel notifikasi,
Di file manifes Anda
Dalam aktivitas Anda, timpa
onWindowFocusChanged()
dan tulis kode di bawah ini.Ini menggunakan izin
Kemudian dalam permintaan aplikasi Anda untuk fokus audio, lihat tautan di bawah ini
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Ini akan menjeda akses audio untuk semua aplikasi lain.
sumber
Ada dua bagian dari solusinya
Untuk mendeteksi penarikan panel notifikasi, Anda dapat menggunakan metode yang disarankan oleh Akash atau kode yang sama di sini oleh Lalith.
Untuk bagian kedua, semua pemutar media yang dirancang dengan baik mengimplementasikan Pendengar Perubahan Fokus Audio. Dengan demikian untuk menjeda semua aplikasi pemutar media, Anda dapat meminta fokus audio sementara atau penuh tergantung pada apakah Anda ingin membiarkan aplikasi tersebut diputar kembali segera setelah panel notifikasi diciutkan.
Gunakan mengikuti
Jangan lupa untuk mengimplementasikan AudioFocusChangeListener
Sejauh yang saya telah meneliti sistem, proses ui tidak dapat diakses. Namun, Anda dapat meluncurkan aktivitas dengan tema transparan .
Dalam manifes Anda
lihat ini dan saya juga telah diuji secara pribadi membuat aktivitas transparan.
Ini berarti bahwa aktivitas di atas sekarang adalah aktivitas transparan Anda dan metode onPause dari aktivitas lain secara alami akan dipanggil. Setelah panel notifikasi diciutkan, Anda dapat menghancurkan aktivitas ini. Dan untuk berada di sisi aman Anda juga dapat mengatur pendengar onTouch dengan membuat tampilan kosong yang terasa layar yang seharusnya menghancurkan aktivitas onTouch.
sumber
Dengan asumsi bahwa perangkat Android menggunakan MediaPlayer default , menurut diagram keadaan ini , Anda dapat menggunakan asli
pause
danstop
negara.Jika Anda tidak ingin menghentikan suara, Anda mungkin dapat mengubah volume suara menggunakan VolumeAutomation ?
sumber