-->

Membuat scheduled SMS di Android dengan menggunakan AlarmManager

Bagi android developer yang ingin membuat penjadwalan tertentu suatu activity pasti sudah kenal dengan AlarmManger. AlarmManager ini adalah sebuah kelas di Android yang dapat digunakan untuk melakukan penjadwalan pada waktu tertentu sesuai dengan keinginan kita.

Jika anda biasa menggunakan java mungkin biasanya menggunakan timer. Tetapi di android tidak disarankan menggunakan timer karena memang di Android tergantung dengan posisi handset. Apabila handset tersebut dimatikan kemudian dibuka lagi otomatis akan mati jika kita menggunakan timer.



Untuk menangani masalah itu gunakan Alarm Manager yang mudah penggunaannya.

Nah contoh misalnya untuk membuat scheduling Sms dengan menggunakan sms manager sebagai berikut :
Disini saya asumsikan ada pengulangan dalam alarm manager yang akan kita set.

Untuk waktu silahkan set di calendar c dengan menggunakan timestamp code bisa menggunakan code dari calendar


public void setSmsSchedule(SmsOrganizerObject smsOrganizer, Calendar c) {
 Intent i = new Intent(this, MySchedulerReceiver.class);
 i.setAction(Constants.ACTION_SEND_SMS);
 Bundle b = new Bundle();
 b.putString(Constants.MESSAGE, smsOrganizer.getMessage());
 b.putString(Constants.NUMBER, smsOrganizer.getRecipient());
 b.putInt(Constants._ID, smsOrganizer.getId());
 i.putExtras(b);
 int repeatMode = smsOrganizer.getRepeatMode();
 PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
 AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
 // set alarm manager pada waktu di calendar
 am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
 if (repeatMode == Constants.REPEAT_HARI) {
  am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY, pi);
 } else if (repeatMode == Constants.REPEAT_BULAN) {
  am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY * 30, pi);
 } else if (repeatMode == Constants.REPEAT_MINGGU) {
  am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY * 7, pi);
 } else if (repeatMode == Constants.REPEAT_TAHUN) {
  am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY * 365, pi);
 }
 String jam = c.get(Calendar.DATE) + " " + c.get(Calendar.MONTH) + " "
   + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR) + ":"
   + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.AM_PM) + "";
 Toast.makeText(this, "Sms telah dijadwalkan pada  " + jam,
   Toast.LENGTH_LONG).show();

}

Jangan lupa buat konstan untuk masing masing misalnya MESSAGE,NUMBER dan _ID yang id yang akan digunakan untuk broadcast receiver nantinya jika action tersebut dipanggil..

Nah untuk menghandle penanganan SMS itu kita bisa menggunakan Broadcast Receiver sebagai berikut :

public class MySchedulerReceiver extends BroadcastReceiver {
 
 Context context;

 @Override
 public void onReceive(Context context, Intent intent) {
  this.context = context;
  // if (intent.getAction().equals(Constants.ACTION_SEND_SMS)) {
  Toast.makeTextcontext, "SMS has been sent", Toast.LENGTH_LONG).show();
  Bundle b = intent.getExtras();
  String phoneNumber = b.getString(Constants.NUMBER);
  String message = b.getString(Constants.MESSAGE);
  sendSMS(phoneNumber, message);
 }

 void sendSMS(String phoneNumber, String message) {
  PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
    new Intent(SENT), 0);
  PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,
    new Intent(DELIVERED), 0);
  SmsManager sms = SmsManager.getDefault();
  sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
  Log.e("PhoneSMSMenu", "sending sms: " + phoneNumber + ", message: "
    + message);
 }
 
}
JAngan lupa untuk mendaftarkan receiver di manifest :
<receiver android:name=".MySchedulerReceiver" >
        </receiver>
 
Okeh  itu saja semoga bermanfaat.. 
Facebook Comments

2 komentar

ad source code nya gak ?? upload dong...

Balas

source code di atas tidak bisa running di android kitkat gan jika appnya di bersihkan dari recnt app ...

Balas