ฉันต้องการทริกเกอร์บล็อกของโค้ดหลังจาก 20 นาทีจากAlarmManager
การตั้งค่า
ใครช่วยแสดงโค้ดตัวอย่างวิธีใช้AlarmManager
ใน ِ Android ให้หน่อยได้ไหม
ฉันเล่นกับโค้ดมาสองสามวันแล้วและมันก็ใช้ไม่ได้
ฉันต้องการทริกเกอร์บล็อกของโค้ดหลังจาก 20 นาทีจากAlarmManager
การตั้งค่า
ใครช่วยแสดงโค้ดตัวอย่างวิธีใช้AlarmManager
ใน ِ Android ให้หน่อยได้ไหม
ฉันเล่นกับโค้ดมาสองสามวันแล้วและมันก็ใช้ไม่ได้
คำตอบ:
"บางตัวอย่างรหัส" AlarmManager
ไม่ได้เป็นเรื่องง่ายเมื่อมันมาถึง
นี่คือตัวอย่างข้อมูลที่แสดงการตั้งค่าของ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);
ในตัวอย่างนี้ฉันใช้setRepeating()
ไฟล์. set()
ถ้าคุณต้องการปลุกยิงหนึ่งคุณก็จะใช้ set()
ให้แน่ใจว่าจะให้เวลาสำหรับการเตือนภัยที่จะเริ่มต้นในฐานเวลาเดียวกับที่คุณใช้ในพารามิเตอร์เริ่มต้น ในตัวอย่างของฉันข้างต้นผมใช้เพื่อให้ฐานเวลาของฉันคือAlarmManager.ELAPSED_REALTIME_WAKEUP
SystemClock.elapsedRealtime()
นี่คือโครงการตัวอย่างขนาดใหญ่ที่แสดงเทคนิคนี้
มีตัวอย่างที่ดีในโค้ดตัวอย่างของ Android
. \ android-sdk \ samples \ android-10 \ ApiDemos \ src \ com \ example \ android \ apis \ app
สิ่งที่ต้องตรวจสอบ ได้แก่ :
ก่อนอื่นคุณต้องมีเครื่องรับสัญญาณซึ่งสามารถฟังเสียงปลุกของคุณได้เมื่อถูกกระตุ้น เพิ่มสิ่งต่อไปนี้ในไฟล์ AndroidManifest.xml ของคุณ
<receiver android:name=".MyAlarmReceiver" />
จากนั้นสร้างคลาสต่อไปนี้
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
}
}
จากนั้นหากต้องการเริ่มการปลุกให้ใช้สิ่งต่อไปนี้ (เช่นในกิจกรรมหลักของคุณ):
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);
.
หรือให้ดีกว่านั้นคือสร้างคลาสที่จัดการทั้งหมดแล้วใช้แบบนี้
Bundle bundle = new Bundle();
// add extras here..
MyAlarm alarm = new MyAlarm(this, bundle, 30);
ด้วยวิธีนี้คุณมีทุกอย่างในที่เดียว (อย่าลืมแก้ไข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();
}
}
สิ่งที่คุณต้องทำก่อนอื่นคือสร้างความตั้งใจที่คุณต้องการกำหนดเวลา จากนั้นรับ pendingIntent ของเจตนานั้น คุณสามารถกำหนดเวลากิจกรรมบริการและการออกอากาศ ในการกำหนดเวลากิจกรรมเช่น MyActivity:
Intent i = new Intent(getApplicationContext(), MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),3333,i,
PendingIntent.FLAG_CANCEL_CURRENT);
ให้ pendingIntent นี้กับ 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);
ตอนนี้ MyActivity จะเปิดตัวหลังจาก 5 วินาทีของการเปิดแอปพลิเคชันไม่ว่าคุณจะหยุดแอปพลิเคชันหรืออุปกรณ์ของคุณเข้าสู่สถานะสลีป (เนื่องจากตัวเลือก RTC_WAKEUP) คุณสามารถอ่านโค้ดตัวอย่างที่สมบูรณ์กิจกรรมการจัดกำหนดการบริการและการออกอากาศ #Android
ฉันต้องการแสดงความคิดเห็น แต่ <50 ตัวแทนดังนั้นนี่ไป การแจ้งเตือนอย่างเป็นมิตรว่าหากคุณใช้ระบบ 5.1 ขึ้นไปและคุณใช้ช่วงเวลาน้อยกว่าหนึ่งนาทีสิ่งนี้จะเกิดขึ้น:
Suspiciously short interval 5000 millis; expanding to 60 seconds
ดูที่นี่ .
โค้ดตัวอย่างบางส่วนเมื่อคุณต้องการเรียกใช้บริการจาก 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);
คุณไม่ต้องถามสิทธิ์ผู้ใช้
AlarmManager ใช้เพื่อทริกเกอร์โค้ดในช่วงเวลาที่กำหนด
ในการเริ่ม Alarm Manager คุณต้องรับอินสแตนซ์จากระบบก่อน จากนั้นส่ง PendingIntent ซึ่งจะดำเนินการในอนาคตที่คุณระบุ
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);
คุณต้องระมัดระวังในขณะใช้ Alarm Manager โดยปกติตัวจัดการการเตือนจะไม่สามารถทำซ้ำก่อนหนึ่งนาที นอกจากนี้ในโหมดพลังงานต่ำระยะเวลาอาจเพิ่มขึ้นได้ถึง 15 นาที