Intent ile Alarm Oluşturmak (Kotlin)
UYARI: Bu yazıdan önce aşağıdaki yazıları okumanız ve bilgisayarınıza Android Studio uygulamasını yüklemeniz gerekiyor. Eğer ilk defa Android uygulaması geliştirmeye başlayan biriyseniz aşağıdaki üç makaleyi sırayla uygulamanız kesinlikle tavsiye edilir.
1. Android Studio Kurulumu
2. İlk Android Projemizi Oluşturmak
3. İlk Android Projeyi Çalıştırmak
Intent kullanarak yeni bir alarm oluşturmak için ACTION_SET_ALARM eylemini kullanırız. Alarm için gerekli olan saat ve mesaj kısmını da EXTRA’ları kullanarak tanımlarız. ACTION_SET_ALARM eylemi için bilinmesi gerekenler aşağıdaki tabloda verilmiştir.
EXTRA_HOUR | Alarm saati bilgisi |
EXTRA_MINUTES | Alarm dakika bilgisi |
EXTRA_MESSAGE | Alarm için başlık belirler |
EXTRA_DAYS | Alarmın tekrarlanacağı gün/günlerdir (ArrayList yapısında) |
EXTRA_VIBRATE | true değeri alırsa titreşim etkinleştirilir |
EXTRA_SKIP_UI | true değeri alırsa alarm uygulamasına geçmeden alarm oluşturulur. |
Şimdi bu bilgileri kullanarak bir alarm uygulaması oluşturabiliriz. Öncelikle uygulama arayüzü için oluşturduğumuz activity_main.xml dosyasına aşağıdaki kodları ekleyiniz.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" tools:context=".MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:ems="10" android:gravity="center" android:padding="10dp" android:text="Alarm Info" android:textColor="@android:color/holo_red_dark" android:textFontWeight="@android:integer/config_longAnimTime" android:textSize="25sp" /> <!--Alarm için saat belirler --> <EditText android:id="@+id/etHour" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:ems="10" android:hint="Hour" android:inputType="number" /> <!--Alarm için dakika belirler --> <EditText android:id="@+id/etMinute" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:ems="10" android:hint="Minute" android:inputType="number" /> <!--Alarm için mesaj belirler --> <EditText android:id="@+id/etMesage" android:layout_width="match_parent" android:layout_height="150dp" android:layout_margin="5dp" android:ems="10" android:gravity="left|top" android:hint="Message" android:inputType="textPersonName" /> <!--Alarm tekrarlanma günleri burada belirlenir. --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/cbSun" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Sun" /> <CheckBox android:id="@+id/cbMon" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Mon" /> <CheckBox android:id="@+id/cbTue" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Tue" /> <CheckBox android:id="@+id/cbWed" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Wed" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/cbThu" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Thu" /> <CheckBox android:id="@+id/cbFri" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Fri" /> <CheckBox android:id="@+id/cbSat" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Sat" /> <CheckBox android:id="@+id/cbOther" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onCheckboxClicked" android:text="Other" android:visibility="invisible" /> </LinearLayout> <!--Alarm verilen bilgilere göre oluşturulur.--> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:onClick="createAlarm" android:text="Create an Alarm" android:textAllCaps="false" android:textColor="@android:color/black" android:textSize="20sp" /> </LinearLayout>
Uygulama kodlarını projemizin ana giriş noktası olan MainActivity.kt isimli Kotlin dosyasında yazdık. Yani bu projede kullandığımız programlama dili Kotlin dilidir. Uygulama kodları aşağıdaki gibidir:
package com.mas.alarmclock import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.AlarmClock import android.view.View import android.widget.CheckBox import android.widget.EditText import android.widget.Toast import java.util.* import kotlin.collections.ArrayList class MainActivity : AppCompatActivity() { //Değişkenlerimiz val days = ArrayList<Int>() lateinit var message: String var hour: Int = 0 var minutes: Int = 0 var etHour: EditText? = null var etMinute: EditText? = null var etMesage: EditText? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) getControls() } //Arayüz kontrollerine erişim sağlarız. private fun getControls() { etHour = findViewById<EditText>(R.id.etHour) etMinute = findViewById<EditText>(R.id.etMinute) etMesage = findViewById<EditText>(R.id.etMesage) } //Alarm için mesaj ve alarmın çalacağı saat ve dakika private fun getInfoAlarm() { hour = (etHour!!.text.toString()).toInt() minutes = (etMinute!!.text.toString()).toInt() message = etMesage!!.text.toString() } fun createAlarm(view: View) { //bu metot ile arayüzde girilen veriler alınır getInfoAlarm() val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) putExtra(AlarmClock.EXTRA_DAYS, days) putExtra(AlarmClock.EXTRA_VIBRATE, true) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) Toast.makeText(baseContext, "Alarm Oluşturuldu", Toast.LENGTH_SHORT).show() } } //Alarmın hangi günler tekrarlanacağı burada belirlenir. fun onCheckboxClicked(view: View) { if (view is CheckBox) { val checked: Boolean = view.isChecked when (view.id) { R.id.cbSun -> { if (checked) { //Pazar günü tekrarlanır. days.add(Calendar.SUNDAY) } else { //Pazar günü tekrarlanmaz. days.remove(Calendar.SUNDAY) } } R.id.cbMon -> { if (checked) { days.add(Calendar.MONDAY) } else { days.remove(Calendar.MONDAY) } } R.id.cbTue -> { if (checked) { days.add(Calendar.TUESDAY) } else { days.remove(Calendar.TUESDAY) } } R.id.cbWed -> { if (checked) { days.add(Calendar.WEDNESDAY) } else { days.remove(Calendar.WEDNESDAY) } } R.id.cbThu -> { if (checked) { days.add(Calendar.THURSDAY) } else { days.remove(Calendar.THURSDAY) } } R.id.cbFri -> { if (checked) { days.add(Calendar.FRIDAY) } else { days.remove(Calendar.FRIDAY) } } R.id.cbSat -> { if (checked) { days.add(Calendar.SATURDAY) } else { days.remove(Calendar.SATURDAY) } } } } } }
Uygulama kodlarını bu şekilde yazdıktan sonra projemizi akıllı telefon veya sanal cihazda deneyebiliriz. Projeyi yüklemeden önce akıllı telefonda bulunan alarm uygulamasının aşağıdaki gibi göründüğünü bilmenizi istiyorum.
Yukarıda görüleceği üzere alarm sayfasında herhangi bir alarm listelenmiyor. Şimdi yüklediğimiz uygulamayı başlatalım ve aşağıdaki işlemleri yapalım.
Yukarıda soldaki ilk görüntüde alarm ile ilgili bilgileri girdik. Butona tıkladıktan sonra sağdaki görüntüde Alarm uygulamasının otomatik olarak başlatıldığını ve alarmın buraya eklendiğini görmekteyiz. Dikkat edilirse projede belirlediğimiz tüm veriler alarm sayfasına tamamen geçmiştir. Bu Intent nesnesinin bize sağladığı bir avantajdır. Intent yardımıyla farklı uygulamalar veya uygulama bileşenleri arasında veri transferi yapılabilir.
MainActivity.kt isimli dosyada bulunan putExtra(AlarmClock.EXTRA_SKIP_UI, true) kodunu sildiğimiz zaman akıllı telefonda bulunan alarm sayfasına geçilmeden alarm oluşturulması sağlanır. Bu satırı silelim ve uygulamayı yeniden yükleyelim.
Yukarıda görüleceği üzere alarm oluştuktan sonra Alarm uygulamasına geçilmediği görülür. Eklediğimiz son alarm ile beraber Alarm uygulamasındaki tüm alarmlar aşağıdaki gibi listelenir.
Intent ile alarm oluşturmak ile ilgili bilmeniz gereken temel bilgiler bunlardan ibarettir. Uygulamanın kaynak kodlarına buradan erişebilirsiniz.
**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.