سلام دوباره خدمت شما عزیزان ، با بخش دیگر از آموزش کاتلین خدمت شما عزیزان هستم . این جلسه می خوام بهتون یاد بدم که چگونه از Alarm در کاتلین یا همون هشدار در کاتلین که به فارسی می گیم استفاده کنیم . اول از همه بزارید یکم توضیح بدم که Alarm در کاتلین یا همون به زبان فارسی هشدار در کاتلین یعنی چی اصلا ؟ بعد آن را برای شما با یه پروژه کوچیک پیاده سازی می کنیم . تا نحوی پیاده سازی ، و کار با Alarm در کاتلین رو یاد بگیرید و تو پروژه هاتون به صورت حرفه ای تر ازش استفاده کنین .
Alarm در کاتلین چه کاربردی دارد؟
همه ی ما تو زندگی روزمره خود کار هایی رو انجام می دهیم و جدا از این برای کار هایی هم که قرار است در روزهای آینده انجام بدیم برنامه ریزی می کنیم . تا اینکه فلان کار را در فلان روز ، و یا یکم دقیق تر اینکه فلان ساعت از روز انجام بدهیم . بعضی مواقع شما نیاز دارید که حتما یک کاری را در یک ساعت مشخص انجام دهید و آن کار دارای اهمیت زیادی است . در اینجاست که اهمیت Alarm در کاتلین زیاد می شود . یعنی ما به برنامه ایی نیاز داریم که این امور ضروری را به یاد ما بیاندازد تا در همان ساعت مشخص به کار های خود برسیم . و همچنین استفاده های زیادی که از این هشدار در کاتلین می توان کرد و همه ی اینها اهمیت بالای این را نشان می دهد .

آموزش پیاده سازی Alarm در کاتلین
چگونه هشدار در کاتلین را پیاده سازی کنیم
ما به کمک یک برنامه ساده نحوی پیاده سازی Alarm در کاتلین را خدمت شما عزیزان یاد می دهیم . در ابتدا شما باید ملزومات این برنامه رو به پروژه خودتون اضافه کنید .
ابتدا کتابخانه زیر را در مسیر app/build.gradle اضافه کنید .
implementation 'com.google.android.material:material:1.3.0'
بعد یک اکتیویتی به اسم Alarm ایجاد کنید . در لایه xml آن کد های زیر را وارد سازید .
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".Alarm">
<TextView
android:id="@+id/Text_alarm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="21:15 PM"
android:textColor="@color/black"
android:textSize="30dp"
android:textStyle="bold" />
<Button
android:id="@+id/Id_Time"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="تنظیم ساعت"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="italic" />
<Button
android:id="@+id/Id_SetAlarm"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="فعال سازی هشدار"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="italic" />
<Button
android:id="@+id/Id_CancelAlarm"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="غیره فعال سازی هشدار"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="italic" />
</LinearLayout>
و در کدنویسی قسمت بالا ما آمدیم و یکسری button و TextView برای کار با Alarm طراحی کردیم . در قسمت اکتیویتی خود کد های زیر را وارد سازید .
ما در قسمت اکتیویتی خود برای Button های خود رویداد های مورد نظرمون رو تعریف کردیم و همچنین از MaterialTimePicker برای تنظیم فرمت ساعت خودمون استفاده کردیم .در رویداد ShowTime نحوی تنظیم ساعت هشدار را نشان میدهد و بعد از آن با کلیک به روی ثبت، هشدار برای شما فعال می گرددو همچنین با کلیلک کردن روی دکمه لغو این هشدار برای ما لغو می گردد.
Alarm.kt .
package com.example.retrofit
import android.app.AlarmManager
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat
import java.util.*
class Alarm : AppCompatActivity() {
lateinit var text: TextView
lateinit var btnTime: Button
lateinit var btnSet_Alarm: Button
lateinit var btnCancel_Alarm: Button
private lateinit var picker: MaterialTimePicker
lateinit var calender: Calendar
lateinit var alarmManager: AlarmManager
lateinit var pendingIntent: PendingIntent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_alarm)
text = findViewById(R.id.Text_alarm)
btnTime = findViewById(R.id.Id_Time)
btnSet_Alarm = findViewById(R.id.Id_SetAlarm)
btnCancel_Alarm = findViewById(R.id.Id_CancelAlarm)
createNotificationChannel()
btnTime.setOnClickListener(View.OnClickListener {
ShowTime()
})
btnSet_Alarm.setOnClickListener(View.OnClickListener {
SetAlarm()
})
}
private fun SetAlarm() {
alarmManager=getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(this,AlarmReceiver::class.java)
pendingIntent= PendingIntent.getBroadcast(this,0,intent,0)
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,calender.timeInMillis,AlarmManager.INTERVAL_DAY,pendingIntent
)
Toast.makeText(this,"Alarm is set ",Toast.LENGTH_LONG).show()
}
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name: CharSequence = "foxandroidReminderChannel"
val descreption = "لغو کردن هشدار"
val inportion = NotificationManager.IMPORTANCE_HIGH
val channel = NotificationChannel("Vezhan", name, inportion)
val notificationmanager = getSystemService(
NotificationManager::class.java
)
notificationmanager.createNotificationChannel(channel)
}
}
private fun ShowTime() {
picker = MaterialTimePicker.Builder().setTimeFormat(TimeFormat.CLOCK_12H)
.setHour(12)
.setMinute(0)
.setTitleText("Select Alarm time")
.build()
picker.show(supportFragmentManager, "foxandroid")
picker.addOnPositiveButtonClickListener {
if (picker.hour > 12) {
text.text = String.format("%02d", picker.hour) + ":" + String.format(
"%02d",
picker.minute
) + "PM"
} else {
if (picker.hour > 12) {
text.text = String.format("%02d", picker.hour) + ":" + String.format(
"%02d",
picker.minute
) + "AH"
}
}
calender= Calendar.getInstance()
calender[Calendar.HOUR_OF_DAY]=picker.hour
calender[Calendar.MINUTE]=picker.minute
calender[Calendar.SECOND]=0
calender[Calendar.MILLISECOND]=0
}
}
}
بعد از آن یک کلاس به اسم AlarmReciver .kt بسازید و کد های این بخش نیز به شکل زیر می باشد . اکثر کد های این قسمت قبلا در مبحث نوتیفیکیشن در کاتلین برای شما توضیح دادیم . که برای چه کاری از PendingIntent استفاده می کنیم و چجوری یک نوتیفیکیشن رو فعال کنیم . فقط این را هم بدانید که DestenationActivity اون صفحه ای هست که موقع کلیک به روی نوتیفیکیشن Alarm به آن هدایت می شوید .
package com.example.retrofit
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val i =Intent(context,DestenationActivity::class.java)
intent!!.flags=Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
val pendingIntent =PendingIntent.getActivity(context,0,i,0)
val builder =NotificationCompat.Builder(context!!,"Vezhan")
.setSmallIcon(R.drawable.splash)
.setContentTitle("هشدار")
.setContentText("کار های دانشگاه را انجام بده !")
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
val notificationManager=NotificationManagerCompat.from(context)
notificationManager.notify(123,builder.build())
}
}
حال که کار های بالا را انجام دادید وارد Android Manifest خود شوید و کد زیر را در آن وارد سازید .
<receiver android:name=".AlarmReceiver"/>
در این جا پروژه به پایان رسید و شما تونستید یک Alarm ساده پیاده سازی کنید ما مباحث پیشرفته تر در مورد Alarm در کاتلین را در مباحث آینده خدمت شما عزیزان آموزش می دهیم .



