Pengguna memulai aplikasi saya dan masuk.
Pilih Batas Waktu Sesi menjadi 5 menit.
Melakukan beberapa operasi pada aplikasi. (semua di latar depan)
Sekarang Pengguna membawa Myapp ke latar belakang dan memulai beberapa aplikasi lain.
----> Penghitung waktu mundur dimulai dan pengguna logout setelah 5 menit
ATAU pengguna mematikan layar.
----> Penghitung waktu mundur dimulai dan pengguna logout setelah 5 menit
Saya ingin perilaku yang sama bahkan saat aplikasi berada di latar depan tetapi pengguna tidak berinteraksi dengan aplikasi untuk waktu yang lama, katakanlah 6-7 menit. Asumsikan layar AKTIF sepanjang waktu. Saya ingin mendeteksi jenis ketidakaktifan pengguna (Tidak ada interaksi dengan aplikasi meskipun aplikasi berada di latar depan) dan memulai penghitung waktu mundur saya.
Jawaban:
Saya menemukan solusi yang menurut saya cukup sederhana berdasarkan jawaban Fredrik Wallenius. Ini adalah kelas aktivitas dasar yang perlu diperluas oleh semua aktivitas.
sumber
Handler
danRunnable
untuk masing-masingActivity
dibuat. Jika kita mengubah dua anggota ini menjadistatic
, ini akan dihindari. Juga, bisa Anda ceritakan mengapa Anda meneleponstopDisconnectTimer()
dionStop()
`?static
pengubah). AdapunonStop()
, dari apa yang saya ingat, saya panggilonBackPressed()
untuk kembali ke layar login di callback putuskan yang pada gilirannya memanggilonStop()
metode tersebut. Ketika pengguna kembali ke layar login secara manual, dengan menekan kembali, pengatur waktu harus dihentikan juga begitu jugastopDisconnectTimer()
masukonStop()
. Saya kira bagian ini tergantung pada kebutuhan dan implementasi Anda.onBackPressed()
vas secukupnya. Jika Anda memiliki lebih dari satu aktivitas di tumpukan, Anda hanya perlu membuat maksud untuk hal itu. Anda mungkin ingin melihat jawaban berikut untuk menghapus tugas Aktivitas (dan mencegah pengguna menyambung kembali di belakang): stackoverflow.com/questions/7075349/…Saya tidak tahu cara melacak ketidakaktifan tetapi ada cara untuk melacak aktivitas pengguna. Anda bisa menangkap panggilan balik yang dipanggil
onUserInteraction()
dalam aktivitas Anda yang dipanggil setiap kali pengguna melakukan interaksi apa pun dengan aplikasi. Saya menyarankan melakukan sesuatu seperti ini:Jika aplikasi Anda berisi beberapa aktivitas, mengapa tidak meletakkan metode ini dalam kelas super abstrak (memperluas
Activity
) dan kemudian meminta semua aktivitas Anda untuk memperluasnya.sumber
Saya pikir Anda harus menggunakan kode ini, ini untuk waktu tunggu sesi idle 5 menit: ->
sumber
Logika isInForeGrnd ===> tidak ditampilkan di sini karena berada di luar cakupan pertanyaan
Anda dapat membangunkan kunci ke cpu dengan menggunakan kode perangkat di bawah ini-
sumber
sumber
Tidak ada konsep "pengguna tidak aktif" di tingkat OS, di luar siaran
ACTION_SCREEN_OFF
danACTION_USER_PRESENT
. Anda harus mendefinisikan "ketidakaktifan" dalam aplikasi Anda sendiri.sumber
Bahkan Anda dapat mengelola kebutuhan Anda dengan @gfrigon atau @AKh solusi.
Tapi inilah solusi Timer dan Penangan gratis untuk ini. Saya sudah memiliki solusi Timer yang dikelola dengan baik untuk ini. Tetapi saya telah berhasil menerapkan solusi gratis Timer dan Handler.
Pertama saya memberi tahu Anda apa yang harus Anda kelola jika Anda menggunakan Timer atau Handlers.
Akhirnya saya menerapkan solusi yaitu
ACTION_SCREEN_ON
/ACTION_SCREEN_OFF
Penerima Siaran.Solusi Terpercaya termudah
Kami tidak akan mengamati ketidakaktifan pengguna berdasarkan pengatur waktu daripada kami akan memeriksa waktu aktivitas terakhir pada aktivitas pengguna. Jadi ketika pengguna berinteraksi aplikasi lain kali, saya memeriksa waktu interaksi terakhir.
Inilah
BaseActivity.class
yang akan Anda perluas dari setiap kelas aktivitas Anda, bukanLoginActivity
. Anda akan menentukan waktu logout Anda di lapanganTIMEOUT_IN_MILLI
di kelas ini.sumber
Di kelas basis aktivitas saya, saya membuat kelas yang dilindungi:
Jadi dalam metode onResume - Anda dapat menentukan tindakan dalam callback Anda apa yang ingin Anda lakukan dengannya ...
sumber
Selama Pencarian, saya menemukan banyak jawaban tetapi ini adalah jawaban terbaik yang saya dapatkan. Tetapi batasan dari kode ini adalah bahwa ia hanya berfungsi untuk aktivitas bukan untuk seluruh aplikasi. Ambil ini sebagai referensi.
misalnya Anda menggunakan 8000, tugas akan dilakukan setelah 8 detik pengguna tidak aktif.
sumber
Ketidakaktifan pengguna dapat mendeteksi menggunakan
onUserInteraction()
metode penggantian di androidBerikut adalah contoh kode, keluar (HomeActivity -> LoginActivity) setelah 3 menit saat pengguna tidak aktif
sumber
Menangani pengguna dalam waktu tunggu interaksi di KOTLIN:
sumber
Berikut adalah solusi lengkap yang Menangani ketidakaktifan pengguna setelah beberapa menit (mis. 3 menit). Ini memecahkan masalah umum seperti Aktivitas melompat ke latar depan saat Aplikasi berada di latar belakang saat waktu habis.
Pertama, kami membuat BaseActivity yang dapat diperluas oleh semua Aktivitas lainnya.
Ini adalah kode BaseActivity.
Selanjutnya, kami membuat antarmuka untuk "Pemroses Logout" kami
Terakhir, kami membuat kelas Java yang memperluas "Aplikasi"
Catatan: Jangan lupa untuk menambahkan kelas "TimeOutApp" ke tag aplikasi Anda di dalam file manifes Anda
sumber
Saya rasa perlu dengan menggabungkan timer dengan waktu aktivasi terakhir.
Jadi seperti ini:
Di onCreate (Bundle storedInstanceState) mulai pengatur waktu, katakanlah 5 menit
Di onUserInteraction () cukup simpan waktu saat ini
Cukup sederhana sejauh ini.
Sekarang ketika timer pop melakukan seperti ini:
sumber
Saya memiliki situasi yang mirip dengan pertanyaan SO, di mana saya perlu melacak ketidakaktifan pengguna selama 1 menit kemudian mengarahkan pengguna untuk memulai Aktivitas, saya juga perlu menghapus tumpukan aktivitas.
Berdasarkan jawaban @gfrigon saya datang dengan solusi ini.
ActionBar.java
Sumber daya pelengkap
Android: Hapus Tumpukan Aktivitas
Kelas Penangan ini harus statis atau kebocoran mungkin terjadi
sumber
Hal terbaik adalah menangani ini di seluruh aplikasi Anda (dengan asumsi Anda memiliki banyak aktivitas) dengan mendaftar
AppLifecycleCallbacks
di kals Aplikasi. Anda dapat menggunakanregisterActivityLifecycleCallbacks()
di kelas Aplikasi dengan callback berikut (saya sarankan membuat kelas AppLifecycleCallbacks yang memperluas ActivityLifecycleCallbacks):sumber
Perpanjang Aktivitas Anda dengan
untuk masuk ke MainActivity saat Pengguna tidak aktif setelah 3000 milidetik di YourActivity
Saya menggunakan jawaban sebelumnya dan mengubahnya menjadi kotlin.
sumber