سلام خدمت کاربران عزیز سایت کدایت، بنده امروز قصد دارم نحوی پیاده سازی نوتیفیکیشن در کاتلین را خدمت شما عزیزان آموزش بدهیم . آموزش امروزمون یه روش ساده برای پیاده سازی نوتیفیکیشن در کاتلین هست . و مباحت پیچیده تر در مورد Notifications رو در آموزش های آینده از سری مباحث آموزش کاتلین خدمت شما دوستان گلم ارائه می کنیم . فعلا فقط نحوی ساخت channel , send Notifications و .. یه سری مباحت ابتدایی رو خدمت شما آموزش می دهیم . که البته این مباحث نیز خیلی مفید است . و اکثر نیز تا این حدود مورد استفاده قرار می گیرد.
نوتیفیکیشن در کاتلین به چه چیزی گفته می شود
اعلان پیامی است که می توانید خارج از رابط کاربری معمولی برنامه خود به کاربر نمایش دهید. هنگامی که به سیستم می گویید اعلانی صادر کند ، ابتدا در قسمت اعلان به عنوان نماد ظاهر می شود. برای مشاهده جزئیات اعلان ، کاربر کشوی اعلان را باز می کند. هر دو منطقه اعلانات و کشوی اعلانها مناطق تحت کنترل سیستم هستند که کاربر می تواند در هر زمان مشاهده کند.
نوتیفیکیشن ها یا Notifications در کاتلین درواقع پیام یا اعلانی هست که ما خارج از رابط کاربری (Ui) خودمون به کاربران نشان می دهیم . وقتی شما نوتیفیکیشن را می فرستید ابتدا در قسمت اعلان ، به عنوان یک نماد برای ما نمایش داده می شود ولی شما و یا کاربران برای اینکه تمام جزئیات Notifications رو مشاهده کنند باید منوی کشوی نوتیفیکیشن یا همون اعلان را پایین بکشند . این را بدانید که هر دو ناحیه اعلانات و کشویی نوتیفیکیشن را سیستم می تواند کنترل کنید . و کاربر هر لحظه که بخواهد می تواند نوتیفیکیشن رو مشاهده کند.
پیاده سازی نوتیفیکیشن یا Notifications در kotlin
برای پیاده سازی نوتیفیکیشن در کاتلین نیازی به کتابخانه خاصی ندارید .ابتدا به قسمت layout اکتیویتی خود بروید و یک button ایجاد کنیم تا هنگام کلیک روی آن نوتیفیکیشن برای ما ارسال شود . کد قسمت layout مانند زیر می باشد .
activity_main.xml .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:background="#D57F9C" tools:context=".MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn" android:text="ارسال نوتیفیکیشن " android:layout_centerInParent="true" android:textSize="18sp" /> </RelativeLayout> |
کد های بخش MainActivity نیز مانند کد های زیر می باشد . که قسمت های را که نیاز به توضیح دارند را خدمت شما عزیزان تشریح می کنیم .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
package com.example.retrofit import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.BitmapFactory import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat class MainActivity : AppCompatActivity() { lateinit var btn: Button private val channelId = "channel_id" private val notificationId = 101 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btn = findViewById(R.id.btn) createNotificationChannel() btn.setOnClickListener(View.OnClickListener { sendNotification() }) } private fun createNotificationChannel() { if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){ val name ="Notification" val descriptionText="Description" val importance=NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(channelId,name,importance).apply { description=descriptionText } val notificationManger:NotificationManager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManger.createNotificationChannel(channel) } } private fun sendNotification(){ val intent=Intent(this,MainActivity::class.java).apply { flags=Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } val pendingIntent :PendingIntent = PendingIntent.getActivity(this,0,intent,0) val bitmap =BitmapFactory.decodeResource(applicationContext.resources,R.drawable.ic_launcher_background) val bitmapLargeIcon=BitmapFactory.decodeResource(applicationContext.resources,R.drawable.splash) val builder =NotificationCompat.Builder(this,channelId).setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle("Splash Screen در کاتلین") .setContentText("سلام عزیزان باری دیگر با آموزش دیگر ازسری آموزش کاتلین خدمت شما عزیزان هستیم .") .setLargeIcon(bitmapLargeIcon) .setStyle(NotificationCompat.BigTextStyle().bigText("سلام عزیزان باری دیگر با آموزش دیگر ازسری آموزش کاتلین خدمت شما عزیزان هستیم . امروز می خواهیم آموزش ساخت splash screen یا همون اسپلش اسکرین را خدمت شما عزیزان آموزش دهیم")) .setContentIntent(pendingIntent) .setPriority(NotificationCompat.PRIORITY_DEFAULT) with(NotificationManagerCompat.from(this)){ notify(notificationId,builder.build()) } } } |
ما با استفاده از NotificationCompat.Builder یک builder ایجاد میکنیم تا با استفاده از آن ویژگی های مختلف نوتیفیکیشن را مقدار دهی کنیم . این ویژگی ها عبارتند از متن عنوان ، توضیحات ، آیکون کوچک در بخش اعلان ، آیکون بزرگ و توضیحات بیشتر و همچنین برخی ویژگی های دیگر . در واقع همه ی این مقدار دهی ها را ما به کمک شی builder تونستیم انجام دهیم . مانند کد های زیر :
1 2 3 4 5 |
val builder =NotificationCompat.Builder(this,channelId) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle("Splash Screen در کاتلین") .setContentText("سلام عزیزان باری دیگر با آموزش دیگر ازسری آموزش کاتلین خدمت شما عزیزان هستیم .") .setLargeIcon(bitmapLargeIcon) |
شما در مواقعی نیاز دارید زمانی که کاربران نوتیفیکیشن شما را مشاهده می کنند . با کلیک روی آن به یک Activity دیگر که شما مایل هستید برود و عملیاتی که هدف شما هست را اجرا کند برای همه ی اینها باید از PendingIntent ها استفاده کنیم .
1 |
val pendingIntent :PendingIntent = PendingIntent.getActivity(this,0,intent,0) |
بقیه کد ها هم خیلی راحت می باشد و نیازی به توضیح نیست . ولی من قصد دارم برخی از روش های استفاده از کلاسNotificationCompat.Builder را برای شما توضیح دهم . چون واقعا دانستن آنها کمک می کند تا بفهمید در چه زمانی از چه روشی استفاده کنید .
کلاسNotificationCompat.Builder در نوتیفیکیشن
- Notification build() : همه ی کار های که لازم است انجام شود را اعمال می کند و یک شی را برای ما برمیگرداند.
- setAutoCancel(true) : وقتی این ویژگی یا همون flag رو به کار می بریم موقعی که کاربر به صفحه ی اعلان کلیک می کند نوتیفیکیشن به صورت خودکار لغو می شود .
- setContentInfo (CharSequence ،Text) : متنی که تعدا کاراکتر های آن زیاد است را در سمت راست تنظیم می کند .
- ()setContentText : اطلاعاتی که از ما میگیرد را در ردیف پایینی نوتیفیکیشن ما به صورت استاندارد تنظیم می کند .
- ()setContentTitle: یک عنوان را از ما می گیرد و آن رادر همون ردیف اول به صورت استاندارد نشان می دهد .
- setLargeIcon (Bitmap bitmap) : آیکون بزرگی که در نوتیفیکیشن ما وجود دارد را تنظیم می کند .
- ()setOngoing : یه مقدار boolean می گیرد تا بفهمد که آیا این Notifications ما به صورت مدوام است و یا خیر
- ()setSmallIcon : ایکون کوچکی که در نوتیفیکیشن ما وجود دارد را تنظیم می کند .
- ()setTicker : اون موقع که اعلان برای ما نمایش داده می شود و یک متن در نوار وضعیت میاید را تنظیم می کند .
- ()setWhen : زمان رویداد را برای ما تنظیم می کند . و یک مقدار long نیز از ما می گیرد .
و اما خروجی برنامه ما به شکل زیر است .
با تشکر از شما که تا آخر آموزش نوتیفیکیشن در کاتلین از ادامه مباحث آموزش کاتلین بود با ما همراه شدید. امیدوارم مفید باشد .
موفق باشید
دیدگاهتان را بنویسید