AMMARPTN

การตั้งเวลา Android : Part 2


ในกรณีที่ต้องการตั้งเวลาให้ทำงานไปเรื่อยๆ ทุกๆ 10 วินาที หรือ 20 นาที โค้ดจะต่างจาก Part 1 เล็กน้อย
โดยเราต้องกำหนดเวลาเริ่มทำงานครั้งแรก เวลาในการทำงานของรอบถัดไป

              
                //กำหนด xxx.class คือ activity/service/BroadcastReceiver  ที่เราจะไปเรียกทำงานเมื่อครบกำหนดเวลา
                Intent intent = new Intent(context, xxx.class);
                Bundle data = new Bundle();

                //กำหนดค่าที่จะส่งไปให้ 
                data.putString("xxx",xxx);
                data.putString("xxx",xxx);
                intent.putExtras(data);

                //เอา intent ใส่ลงไป สร้างเป็น PendingIntent และกำหนด AlarmID
                //เราต้องกำหนดไว้ กรณีที่เราต้องการแจ้งเตือนหลายๆอัน เช่นเตือนนาฬิกาปลุกที่มีหลายเวลา
                PendingIntent sender = PendingIntent.getBroadcast(context, AlarmID, intent, 0);

                //กำหนดเวลาแจ้งเตือนครั้งแรก ในที่นี้จะสั่งให้เริ่มทำงานเลยก็ ดึงเวลาปัจจุบันมา
                long firstTime = SystemClock.elapsedRealtime();
                

                // สร้าง AlarmManager  เพื่อเริ่มตั้งเวลา โดย ส่วนของ 86400 * 1000 คือการทำงาน ในรอบถัดไป นับเป็น มิลิวินาที
                //ในที่นี้คือ 86400 นาที หรือเท่ากับ 24 ชั่วโมง มันก็จะทำงานทุกๆ 24 ชั่วโมง
             AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
                am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                        firstTime, 86400 * 1000, sender);

                

เมื่อมันเริ่มทำงานแล้วเราต้องการยกเลิก ให้ ใช้คำสั่งนี้ในการยกเลิก

//กำหนด xxx.class และ AlarmID ให้ตรงกัน เพื่อมันจะได้รู้ว่าจะไปยกเลิกตัวจับเวลาแจ้งเตือนตัวไหน
 Intent intent = new Intent(context,xxx.class);
                    PendingIntent sender = PendingIntent.getBroadcast(context,
                            AlarmID, intent, 0);
                    AlarmManager am = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
                    am.cancel(sender);

หากระหว่างการนับเวลามีการ ปิดเครื่องหรือ รีสตาร์ท มันจะถูกยกเลิกการนับเวลาด้วยครับ

เรียบร้อยครับสำหรับการตั้งเวลา