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