"Beberapa kode contoh" tidak semudah itu AlarmManager
.
Berikut ini cuplikan yang menunjukkan penyiapan AlarmManager
:
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
Dalam contoh ini, saya menggunakan setRepeating()
. Jika Anda menginginkan alarm sekali pakai, Anda cukup menggunakan set()
. Pastikan untuk memberikan waktu untuk alarm mulai dalam basis waktu yang sama seperti yang Anda gunakan di parameter awal untuk set()
. Dalam contoh saya di atas, saya menggunakan AlarmManager.ELAPSED_REALTIME_WAKEUP
, jadi basis waktu saya adalah SystemClock.elapsedRealtime()
.
Berikut adalah contoh proyek yang lebih besar yang menunjukkan teknik ini.
Ada beberapa contoh bagus dalam kode contoh android
Yang harus diperiksa adalah:
Pertama, Anda memerlukan penerima, sesuatu yang dapat mendengarkan alarm Anda saat dipicu. Tambahkan berikut ini ke file AndroidManifest.xml Anda
<receiver android:name=".MyAlarmReceiver" />
Kemudian, buat kelas berikut
public class MyAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show(); } }
Kemudian, untuk memicu alarm, gunakan yang berikut (misalnya dalam aktivitas utama Anda):
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, MyAlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); Calendar time = Calendar.getInstance(); time.setTimeInMillis(System.currentTimeMillis()); time.add(Calendar.SECOND, 30); alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
.
Atau, lebih baik lagi, buat kelas yang menangani semuanya dan gunakan seperti ini
Bundle bundle = new Bundle(); // add extras here.. MyAlarm alarm = new MyAlarm(this, bundle, 30);
dengan cara ini, Anda memiliki semuanya di satu tempat (jangan lupa untuk mengedit
AndroidManifest.xml
)public class MyAlarm extends BroadcastReceiver { private final String REMINDER_BUNDLE = "MyReminderBundle"; // this constructor is called by the alarm manager. public MyAlarm(){ } // you can use this constructor to create the alarm. // Just pass in the main activity as the context, // any extras you'd like to get later when triggered // and the timeout public MyAlarm(Context context, Bundle extras, int timeoutInSeconds){ AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, MyAlarm.class); intent.putExtra(REMINDER_BUNDLE, extras); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar time = Calendar.getInstance(); time.setTimeInMillis(System.currentTimeMillis()); time.add(Calendar.SECOND, timeoutInSeconds); alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent); } @Override public void onReceive(Context context, Intent intent) { // here you can get the extras you passed in when creating the alarm //intent.getBundleExtra(REMINDER_BUNDLE)); Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show(); } }
sumber
Yang perlu Anda lakukan adalah membuat maksud yang perlu Anda jadwalkan terlebih dahulu. Kemudian dapatkan pendingIntent dari maksud tersebut. Anda dapat menjadwalkan aktivitas, layanan, dan siaran. Untuk menjadwalkan aktivitas, mis. Aktivitas Saya:
Intent i = new Intent(getApplicationContext(), MyActivity.class); PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),3333,i, PendingIntent.FLAG_CANCEL_CURRENT);
Berikan pendingIntent ini ke alarmManager:
//getting current time and add 5 seconds in it Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 5); //registering our pending intent with alarmmanager AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), pi);
Sekarang MyActivity akan diluncurkan setelah 5 detik peluncuran aplikasi, tidak peduli Anda menghentikan aplikasi atau perangkat Anda dalam keadaan tidur (karena opsi RTC_WAKEUP). Anda dapat membaca kode contoh lengkap Penjadwalan aktivitas, layanan, dan siaran #Android
sumber
Saya ingin berkomentar tetapi <50 perwakilan, jadi begini. Pengingat ramah bahwa jika Anda menjalankan pada 5.1 atau lebih tinggi dan Anda menggunakan interval kurang dari satu menit, ini terjadi:
Suspiciously short interval 5000 millis; expanding to 60 seconds
Lihat disini .
sumber
Beberapa kode contoh saat Anda ingin memanggil layanan dari Alarmmanager:
PendingIntent pi; AlarmManager mgr; mgr = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(DataCollectionActivity.this, HUJIDataCollectionService.class); pi = PendingIntent.getService(DataCollectionActivity.this, 0, i, 0); mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , 1000, pi);
Anda tidak perlu meminta izin pengguna.
sumber
AlarmManager digunakan untuk memicu beberapa kode pada waktu tertentu.
Untuk memulai Manajer Alarm, Anda harus terlebih dahulu mendapatkan instans dari Sistem. Kemudian teruskan PendingIntent yang akan dieksekusi di waktu mendatang yang Anda tentukan
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent alarmIntent = new Intent(context, MyAlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); int interval = 8000; //repeat interval manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
Anda harus berhati-hati saat menggunakan Pengelola Alarm. Biasanya, pengelola alarm tidak dapat mengulang sebelum satu menit. Juga dalam mode daya rendah, durasinya dapat meningkat hingga 15 menit.
sumber