Site icon Mobilhanem

Android Alarm Manager Kullanımı

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.

( 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);

( 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);

Ş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..

3
Exit mobile version