Pada tutorial kali ini kita akan membuat aplikasi alarm pada android. Aplikasi ini akan membunyikan alarm pada waktu yang sudah ditentukan oleh user. Untuk mempersingkat waktu, berikut hal yang dibutuhkan untuk membuat aplikasi ini.
- IDE (Android Studio)
- Sound untuk alarm format mp3
- MainActivity
- TimePicker Dialog
- OnTimeSetListener
- Receiver Class
Pertama buat project baru dengan minSdkVersion 8 dan targetSdkVersion 15. Beri nama sesuka anda.
Setelah itu buka layout untuk MainActivity dan ubah menjadi seperti ini.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="My Alarm" android:textAppearance="?android:attr/textAppearanceLarge" /> <AnalogClock android:id="@+id/analogClock1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/startSetDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@android:drawable/ic_lock_idle_alarm" android:text="Set Alarm" /> <TextView android:id="@+id/alarmprompt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" /> </LinearLayout>
Jika sudah maka tampilan akan menjadi seperti ini
Pada Activity ini kita menggunakan view AnalogClock hanya untuk sekedar menampilkan waktu. Button Set Alarm digunakan untuk menentukan kapan alarm berbunyi. Sekarang kita mau saat user menekan button maka akan ditampilkan TimePicker sehingga user bisa menentukan jam dan menit berapa alarm akan berbunyi.
Tambahkan beberapa field berikut pada MainActivity. Field tersebut akan digunakan untuk view yang ada pada layout dan sebuah field untuk requestCode.
TimePicker myTimePicker; Button buttonstartSetDialog; TextView textAlarmPrompt; TimePickerDialog timePickerDialog; final static int RQS_1 = 1;
Pada fungsi onCreate tambahkan baris code ini
textAlarmPrompt = (TextView) findViewById(R.id.alarmprompt); buttonstartSetDialog = (Button) findViewById(R.id.startSetDialog); buttonstartSetDialog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textAlarmPrompt.setText(""); openTimePickerDialog(false); } });
Sekarang saat user menekan button Set Alarm maka aplikasi akan menampilkan TimePicker dengan fungsi berikut. Tambahkan baris code ini ke MainActivity.
private void openTimePickerDialog(boolean is24r) { Calendar calendar = Calendar.getInstance(); timePickerDialog = new TimePickerDialog(MainActivity.this, onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); timePickerDialog.setTitle("Set Alarm Time"); timePickerDialog.show(); }
Jika waktu sudah diset maka kita memerlukan satu listener lagi yaitu OnTimeSetListener. Berikut baris code nya.
OnTimeSetListener onTimeSetListener = new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calNow = Calendar.getInstance(); Calendar calSet = (Calendar) calNow.clone(); calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); calSet.set(Calendar.MINUTE, minute); calSet.set(Calendar.SECOND, 0); calSet.set(Calendar.MILLISECOND, 0); if (calSet.compareTo(calNow) <= 0) { // Today Set time passed, count to tomorrow calSet.add(Calendar.DATE, 1); Log.i("hasil", " =<0"); } else if (calSet.compareTo(calNow) > 0) { Log.i("hasil", " > 0"); } else { Log.i("hasil", " else "); } setAlarm(calSet); } };
Sekarang kita perlu mengirim waktu yang sudah ditentukan ke receiver alarm (receiver akan dibuat setelah ini).
private void setAlarm(Calendar targetCal) { textAlarmPrompt.setText("***\n" + "Alarm set on " + targetCal.getTime() + "\n***"); Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( getBaseContext(), RQS_1, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); }
Terakhir kita membuat sebuah class baru bernama AlarmReceiver dengan extends BroadcastReceiver. Class ini akan bekerja sesuai namanya yaitu sebagai receiver .
package com.alarm.app; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver { MediaPlayer player; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "Alarm aktif!", Toast.LENGTH_LONG).show(); player = MediaPlayer.create(context, R.raw.alarm); player.start(); } }
Sebelum kita bisa menguji aplikasi alarm yang sudah dibuat kita memerlukan sebuah file suara untuk dijadikan alarm. Buatlah sebuah folder bernama raw di dalam res folder.
Buka folder tersebut lalu simpan file suara yang akan digunakan sebagai alarm. Beri nama file tersebut dengan alarm.mp3 agar lebih mudah.
Ubah AndroidManifest.xml dan tambahkan receiver pada application seperti baris code di bawah ini.
FULL SOURCE CODE
MainActivity.java
package com.alarm.app; import java.util.Calendar; import android.os.Bundle; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.TimePicker; public class MainActivity extends Activity { TimePicker myTimePicker; Button buttonstartSetDialog; TextView textAlarmPrompt; TimePickerDialog timePickerDialog; final static int RQS_1 = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textAlarmPrompt = (TextView) findViewById(R.id.alarmprompt); buttonstartSetDialog = (Button) findViewById(R.id.startSetDialog); buttonstartSetDialog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textAlarmPrompt.setText(""); openTimePickerDialog(false); } }); } private void openTimePickerDialog(boolean is24r) { Calendar calendar = Calendar.getInstance(); timePickerDialog = new TimePickerDialog(MainActivity.this, onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); timePickerDialog.setTitle("Set Alarm Time"); timePickerDialog.show(); } OnTimeSetListener onTimeSetListener = new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calNow = Calendar.getInstance(); Calendar calSet = (Calendar) calNow.clone(); calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); calSet.set(Calendar.MINUTE, minute); calSet.set(Calendar.SECOND, 0); calSet.set(Calendar.MILLISECOND, 0); if (calSet.compareTo(calNow) <= 0) { // Today Set time passed, count to tomorrow calSet.add(Calendar.DATE, 1); Log.i("hasil", " =<0"); } else if (calSet.compareTo(calNow) > 0) { Log.i("hasil", " > 0"); } else { Log.i("hasil", " else "); } setAlarm(calSet); } }; private void setAlarm(Calendar targetCal) { textAlarmPrompt.setText("***\n" + "Alarm set on " + targetCal.getTime() + "\n***"); Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( getBaseContext(), RQS_1, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); } }
AlarmReceiver.java
package com.alarm.app; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver { MediaPlayer player; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "Alarm aktif!", Toast.LENGTH_LONG).show(); player = MediaPlayer.create(context, R.raw.alarm); player.start(); } }
Sekian teman-teman jagocoding tutorial kali ini. Semoga bermanfaat :-)