Saya ingin menerapkan fungsi jadwal dalam proyek saya. Jadi saya mencari Google untuk program manajer Alarm tetapi saya tidak dapat menemukan contoh.
Adakah yang bisa membantu saya dengan program manajer alarm dasar?
java
android
kotlin
alarmmanager
Rajamohan Sugumaran
sumber
sumber
Jawaban:
Ini adalah kode yang berfungsi. Ini membangunkan CPU setiap 10 menit sampai telepon mati.
Tambahkan ke Manifest.xml:
Kode di kelas Anda:
Setel Alarm dari Layanan:
Jika Anda ingin mengatur alarm berulang saat boot telepon:
Tambahkan izin dan layanan ke Manifest.xml:
Dan buat kelas baru:
sumber
am.setInexactRepeating(...)
sehingga telepon tidak perlu terbangun karena layanan. Pemrogram lain harus memperhatikan fakta ini. 2. Daripada membuat baruAlarm
diAutoStart
setelah menerimaRECEIVE_BOOT_COMPLETED
niat, mungkin lebih masuk akal untuk memulaiYourService
dariAutoStart
, seperti yang ditunjukkan di sini: stackoverflow.com/a/5439320/198348WakefulBroadcastReceiver
dideportasi dariAndroid O
Saya mencoba solusi dari XXX dan sementara itu awalnya bekerja, di beberapa titik itu berhenti berfungsi. Yang
onReceive
tidak pernah dipanggil lagi. Saya menghabiskan waktu berjam-jam untuk mencari tahu apa itu. Apa yang saya sadari adalah bahwaIntent
alasan misterius apa pun tidak lagi dipanggil. Untuk menyiasati ini, saya menemukan bahwa Anda benar-benar perlu menentukan tindakan untuk penerima di manifes. Contoh:Perhatikan bahwa nama itu
".Alarm"
dengan titik. DalamsetAlarm
metode XXX , buatIntent
sebagai berikut:The
START_ALARM
pesan dapat menjadi apa pun yang Anda inginkan. Saya hanya memberikan nama itu untuk tujuan demonstrasi.Saya belum melihat penerima yang ditentukan dalam manifes tanpa filter maksud yang menentukan tindakan. Menciptakannya seperti yang ditentukan XXX tampaknya agak palsu. Dengan menentukan nama tindakan, Android akan dipaksa untuk membuat turunan dari
BroadcastReceiver
penggunaan kelas yang sesuai dengan tindakan. Jika Anda mengandalkan konteks, ketahuilah bahwa Android memiliki beberapa objek berbeda yang SEMUA disebut konteks dan mungkin tidak menghasilkan karya AndaBroadcastReceiver
. Memaksa Android untuk membuat instance kelas Anda hanya menggunakan pesan tindakan jauh lebih baik daripada mengandalkan beberapa konteks rapuh yang mungkin tidak pernah berhasil.sumber
PendingIntent.getBroadcast
dokumentasiFor security reasons, the Intent you supply here should almost always be an explicit intent, that is specify an explicit component to be delivered to through Intent.setClass
,.android:exported="true"
diperlukan agar bisa berfungsi?Inilah contoh yang cukup lengkap. Ternyata tombol menjadi merah setelah 5sec.
Ingat juga bahwa AlarmManager menyala meskipun aplikasi Anda tidak berjalan. Jika Anda memanggil fungsi ini dan menekan tombol Rumah, tunggu 5 detik, lalu kembali ke aplikasi Anda, tombol akan berubah menjadi merah.
Saya tidak tahu perilaku seperti apa yang akan Anda dapatkan jika aplikasi Anda tidak memiliki memori sama sekali, jadi berhati-hatilah dengan kondisi seperti apa yang Anda coba pertahankan.
sumber
RTC_WAKEUP
alih - alihELAPSED_REALTIME_WAKEUP
) tampaknya tidak memicu penerima dalam aplikasi yang tampaknya telah dibongkar oleh sistem untuk menghemat daya, meskipun itu berfungsi tidak lama setelah layar Beranda dibawa ke latar depan.MainActivity.java
MyBroadcastReceiver.java
AndroidManifest.xml
sumber
•
AlarmManager
dikombinasikan denganIntentService
Saya pikir pola terbaik untuk digunakan
AlarmManager
adalah kolaborasi denganIntentService
. IniIntentService
dipicu olehAlarmManager
dan menangani tindakan yang diperlukan melalui niat penerima. Struktur ini tidak memiliki dampak kinerja seperti menggunakanBroadcastReceiver
. Saya telah mengembangkan kode sampel untuk gagasan ini dikotlin yang tersedia di sini:MyAlarmManager.kt
MyIntentService.kt
manifes.xml
Pemakaian:
Jika Anda ingin membatalkan alarm yang dijadwalkan, coba ini:
sumber
Kode ini akan membantu Anda membuat alarm berulang. Waktu berulang dapat Anda atur.
activity_main.xml
MainActivity.java
Jika Anda hanya perlu alarm untuk satu waktu, maka ganti
dengan
sumber
Saya telah membuat implementasi sendiri untuk melakukan ini dengan cara sesederhana mungkin.
Satu-satunya langkah selanjutnya, terapkan.
Saya suka bekerja dengan implementasi ini, tetapi cara lain yang mungkin baik, itu tidak membuat
AbstractSystemServiceTask
abstrak kelas, dan membangunnya melalui Builder.Saya harap ini membantu Anda.
DIPERBARUI Ditingkatkan untuk memungkinkan beberapa orang
BackgroundTaskListener
melakukan hal yang samaBroadCastReceiver
.sumber
Manajer Alarm:
Tambahkan Ke Tata Letak XML (* init tampilan ini di buat di aktivitas utama)
Add To Manifest (Tag aplikasi di dalam && kegiatan di luar)
Buat AlarmBroadcastManager Class (mewarisi dari BroadcastReceiver)
Dalam Kegiatan Utama (Tambahkan Fungsi-Fungsi ini):
sumber
Berikut ini contoh dengan Pengelola Alarm menggunakan Kotlin:
sumber