Merhaba Arkadaşlar ,
Mobilhanem.com sitemizden anlattığımız/yayınladığımız derslerimize bu dersimizde, Android Alarm Manager kullanımı dersi ile devam ediyoruz.
Alarm Manager , android cihazlar da alarm servisine erişebilmemiz için oluşturulan bir sınıftır. Örneğin uygulama içinde alarmımız ayarlanır ve uygulama kapatılır. Belirtilen alarm aralığına göre uygulamamız kapalı olsa bile alarm çalışır bu android de arkan planda çalışan servisler tarafından gerçekleşir.
Bu servisler sayesinde kullanıcıya hem kullanıcıya uyarı verilebilir hemde istenen alarm olayı tetiklenir. Aslında uyarılar için iki temel saat tipi vardır. Android Alarm Manager Kullanımını çeşitli zaman tiplerine göre gruplandırabiliriz ; geçirilen zamana göre uyarı almak istiyorsanız ( elapsed real time ) kullanılır. ( örnek verecek olursak; her yarım saat de bir alarm olayının tetiklenmesi ), gerçek zamana göre uyarı almak istiyorsanız ( real time clock ) kullanılır. ( örnek verecek olursak; saat öğlen saat 4 de alarmın tetiklenmesi vb. ) Her iki türde de telefon ekranı kapalı dahi olsa cihazı uyandırmak mümkündür.
- RTC_WAKEUP : Belli bir zamanda, sıra bekleyen Intent’i çalıştırmak için cihazı uyandırır.
( Aşağıdaki kod a baktığımızda öğlen saat 4 de alarm çalacak şekilde alarm kurulur. ( not: alarm günde bir kere belirtilen saat de çalışır. )
Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 16); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
- RTC : Belli bir zamanda, sıra bekleyen Intent’i çalıştırır fakat cihaz uyku modunda ise cihazı uyandırmaz.
- ELAPSED_REALTIME_WAKEUP : Geçen zamana göre Intent’i çalıştırmak için cihazı uyandırır.
( Aşağıdaki koda baktığımızda 30 dakika içinde alarm devreye girer ve her 30 dakika da setInexactRepeating komutu sayesinde yeniden tetiklenir. )
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);
- ELAPSED_REALTIME : Geçen zamana göre Intent’i çalıştırır fakat cihaz uyku modunda ise cihazı uyandırmaz.
Şimdi RTC_WAKEUP türüne göre küçük bir örnek yapmaya başlayalım; öncelikle android projemizde uyarı yayınını alabilmemiz için BroadcastReceiver kullanıyoruz. Aşağıdaki sınıfımıza baktığımızda alarm tetiklendiğinde onReceive methodunda kullanıcıya Toast mesajını gösteriyoruz ve cihazda default olarak seçili olan alarm müziği ne ise onu çalıyoruz.
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Alarm Çalıyor! Artık Uyan!", Toast.LENGTH_LONG).show(); Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); if (alarmUri == null) { alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); } Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); ringtone.play(); } }
MainActivity sınıfımız ise aşağıdadır. Kaynak kodları indirip çalıştırdığınızda açılan sayfada butona tıklıyoruz ve karşımızda pop up içinde saat dilimi çıkıyor ve alarmın saat kaçta çalmasını gerektiğini belirliyoruz.
MainActivity.java
public class MainActivity extends Activity { private Button startAlarmBtn; private TimePickerDialog timePickerDialog; final static int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startAlarmBtn = (Button)findViewById(R.id.startAlarmBtn); startAlarmBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openPickerDialog(false); } }); } private void openPickerDialog(boolean is24hour) { Calendar calendar = Calendar.getInstance(); timePickerDialog = new TimePickerDialog( MainActivity.this, onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), is24hour); timePickerDialog.setTitle("Alarm Ayarla"); timePickerDialog.show(); } TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.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){ calSet.add(Calendar.DATE, 1); } setAlarm(calSet); }}; private void setAlarm(Calendar alarmCalender){ Toast.makeText(getApplicationContext(),"Alarm Ayarlandı!",Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), REQUEST_CODE, intent, 0); AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalender.getTimeInMillis(), pendingIntent); } }
Son olarak AndroidManifest.xml dosyamızda yukarıda oluşturduğumuz receiver sınıfını tanımlıyoruz. ( not: bu tanımlamayı yapmazsanız BroadcastReceiver hiç bir zaman devreye girmeyecektir ve alarm olayı tetiklenmeyecektir. )
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mobilhanem.alarmmanagerexample"> <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> <application android:allowBackup="true" android:icon="@drawable/mobilhanem_logo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".AlarmReceiver" /> </application> </manifest>
İşte Android AlarmManager Kullanımı bu kadar kolay , temel olarak önemli noktalara değinmeye çalıştım umarım faydalı olur herkese.
Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.
Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.
Bir dahaki dersimizde görüşmek dileğiyle..