Ini telah membuatku gila untuk sementara waktu sekarang.
Adakah cara yang andal untuk mendeteksi jika tombol beranda telah ditekan di aplikasi Android?
Jika tidak, apakah ada cara yang tepat untuk mengetahui apa yang menyebabkan aktivitas masuk ke onPause? yaitu Bisakah kita mendeteksi apakah itu disebabkan oleh peluncuran aktivitas baru atau dengan menekan kembali / beranda.
Satu saran yang telah saya lihat adalah mengganti onPause () dan memanggil isFinishing () tetapi ini akan mengembalikan false saat menekan tombol beranda sama seperti jika aktivitas baru dimulai, jadi ini gagal untuk membedakan keduanya.
Setiap bantuan sangat dihargai.
** Pembaruan **: Terima kasih kepada @ android-hung untuk tautan ini: https://nishandroid.blogspot.com/
Mengatasi metode berikut:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Kemudian acara berikut AKAN dipicu untuk penekanan tombol beranda:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Saya tidak yakin apakah ada efek samping dengan baris ini:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Jadi tampaknya bertentangan dengan kepercayaan populer, Anda sebenarnya dapat mendengarkan kunci rumah. Yang mengkhawatirkan, Anda dapat mengembalikan false dan kunci beranda tidak melakukan apa pun.
Pembaruan : Seperti yang diharapkan, ada beberapa efek samping dengan ini - tampaknya video yang disematkan dan peta Google tidak terlihat dengan mode ini diaktifkan.
Pembaruan : Seharusnya peretasan ini tidak lagi berfungsi mulai Android 4.0 dan seterusnya
sumber
Activity.onUserLeaveHint()
.Jawaban:
Kode berikut berfungsi untuk saya :)
sumber
onHomeLongPressed
sebenarnya tampaknya sesuai dengan pembukaan aktivitas sistem "Terbaru". Di ponsel saya, itu dipicu dengan menekan tombol terbaru di sebelah tombol beranda, jadi asumsi kode Anda tentang itu sebagai pers lama di rumah tidak selalu benar.final String SYSTEM_DIALOG_REASON_LONG_PRESS = "assist"
Ini adalah pertanyaan lama tapi mungkin bisa membantu seseorang.
Menurut dokumentasi, metode onUserLeaveHint () dipanggil saat pengguna mengklik tombol beranda ATAU ketika sesuatu mengganggu aplikasi Anda (seperti panggilan telepon masuk).
Ini bekerja untuk saya .. :)
sumber
Tidak mungkin mendeteksi dan / atau mencegat tombol HOME dari dalam aplikasi Android. Ini dibangun ke dalam sistem untuk mencegah aplikasi berbahaya yang tidak dapat keluar.
sumber
Saya perlu memulai / menghentikan musik latar di aplikasi saya saat aktivitas pertama dibuka dan ditutup atau saat aktivitas apa pun dijeda oleh tombol beranda dan kemudian dilanjutkan dari pengelola tugas. Pemutaran murni berhenti / melanjutkan
Activity.onPause()
danActivity.onResume()
mengganggu musik untuk sementara waktu, jadi saya harus menulis kode berikut:yang menyela pemutaran hanya ketika aplikasi (semua aktivitasnya) ditutup atau ketika tombol beranda ditekan. Sayangnya saya tidak berhasil mengubah urutan pemanggilan
onPause()
metode aktivitas awal dan aktivitasonResume()
yang dimulai saatActivity.startActivity()
dipanggil (atau mendeteksionPause()
aktivitas tersebut meluncurkan aktivitas lain dengan cara lain) sehingga kasus ini harus ditangani secara khusus:Kelemahan lainnya adalah membutuhkan
GET_TASKS
izin yang ditambahkan keAndroidManifest.xml
:Memodifikasi kode ini sehingga hanya bereaksi pada penekanan tombol home sangatlah mudah.
sumber
Timpa
onUserLeaveHint()
dalam aktivitas. Tidak akan pernah ada panggilan balik ke aktivitas ketika aktivitas baru datang atau pengguna menekan kembali tekan.sumber
onUserLeaveHint ();
ganti metode kelas aktivitas ini. Ini akan mendeteksi klik tombol beranda. Metode ini dipanggil tepat sebelum callback onPause () aktivitas. Namun metode ini tidak akan dipanggil saat aktivitas diinterupsi seperti aktivitas dalam panggilan masuk ke latar depan, selain interupsi itu akan dipanggil saat pengguna mengklik tombol beranda.
sumber
Cobalah membuat penghitung untuk setiap layar. Jika pengguna menyentuh HOME, maka penghitung akan menjadi nol.
sumber
Anda dapat mempertimbangkan solusi oleh Andreas Shrade dalam postingnya tentang Cara Membuat Mode Kios Kerja di Android . Ini agak hacky, tetapi mengingat alasan intersepsi tombol beranda dicegah itu harus;)
sumber
Saya mengalami masalah ini, dan karena menimpa metode onKeyDown () tidak mencapai apa-apa karena sistem android yang mendasarinya tidak memanggil metode ini, saya menyelesaikannya dengan mengganti onBackPressed (), dan saya menetapkan nilai boolean di sana ke false , karena saya menekan kembali, izinkan saya menunjukkan kepada Anda apa yang saya maksud dalam kode:
Jadi alasan mengapa ini berhasil adalah karena satu-satunya cara untuk menavigasi di luar aktivitas ini adalah dengan menekan kembali atau beranda jadi jika kembali ditekan maka saya tahu penyebabnya bukan di rumah, tetapi sebaliknya penyebabnya adalah rumah, oleh karena itu saya menetapkan boolean default nilai untuk homePressed menjadi benar. Namun ini hanya akan bekerja dengan satu instance aktivitas dalam aplikasi Anda karena jika tidak, Anda memiliki lebih banyak kemungkinan untuk menyebabkan metode onPause () dipanggil.
sumber
homePressed
ke true, lalu beralih ke aplikasi lain akan menganggap Beranda ditekan padahal sebenarnya tidak.Sejak API 14 Anda dapat menggunakan fungsi tersebut
onTrimMemory()
dan memeriksa benderanyaTRIM_MEMORY_UI_HIDDEN
. Ini akan memberi tahu Anda bahwa Aplikasi Anda menuju ke latar belakang.Jadi di kelas Aplikasi kustom Anda, Anda dapat menulis sesuatu seperti:
Untuk studi mendalam tentang ini, saya mengundang Anda untuk membaca artikel ini: http://www.developerphil.com/no-you-can-not-override-the-home-button-but-you-dont-have -untuk/
sumber
Opsi untuk aplikasi Anda adalah menulis Layar Beranda pengganti menggunakan maksud android.intent.category.HOME. Saya yakin jenis Intent ini Anda dapat melihat tombol beranda.
Keterangan lebih lanjut:
http://developer.android.com/guide/topics/intents/intents-filters.html#imatch
sumber
Karena Anda hanya ingin aktivitas root ditampilkan kembali saat aplikasi diluncurkan, mungkin Anda bisa mendapatkan perilaku ini dengan mengubah mode peluncuran, dll. Di manifes?
Misalnya, pernahkah Anda mencoba menerapkan atribut android: clearTaskOnLaunch = "true" ke aktivitas peluncuran Anda, mungkin bersama-sama dengan android: launchMode = "singleInstance" ?
Tasks and Back Stack adalah sumber yang bagus untuk menyempurnakan perilaku semacam ini.
sumber
Merupakan ide yang buruk untuk mengubah perilaku kunci rumah. Inilah mengapa Google tidak mengizinkan Anda mengganti kunci rumah. Saya tidak akan mengacaukan kunci rumah secara umum. Anda perlu memberi pengguna cara untuk keluar dari aplikasi Anda jika aplikasi tersebut masuk ke gulma karena alasan apa pun.
Saya membayangkan pekerjaan apa pun di sekitar akan memiliki efek samping yang tidak diinginkan.
sumber
Baru-baru ini saya mencoba mendeteksi tombol home press, karena saya membutuhkannya untuk melakukan hal yang sama dengan metode " onBackPressed () ". Untuk melakukan ini, saya harus mengganti metode " onSupportNavigateUp () " seperti ini:
Ini bekerja dengan sempurna. =)
sumber
Jawaban Jack berfungsi sempurna untuk
click
acara sementara yanglongClick
sedang dipertimbangkan adalah sebagaimenu
klik tombol.Ngomong-ngomong, jika ada yang bertanya-tanya bagaimana caranya melalui kotlin,
sumber
Android Home Key ditangani oleh lapisan kerangka kerja, Anda tidak dapat menangani ini di tingkat lapisan aplikasi. Karena aksi tombol beranda sudah ditentukan di tingkat di bawah ini. Tetapi Jika Anda mengembangkan ROM khusus Anda, maka itu mungkin saja. Google membatasi fungsi TOMBOL HOME karena alasan keamanan.
sumber
Ini berhasil untuk saya. Anda dapat mengganti metode onUserLeaveHint https://www.tutorialspoint.com/detect-home-button-press-in-android
sumber