از Android 8.0 (سطح API 26)، همه اعلانها باید به یک کانال اختصاص داده شوند. برای هر کانال، میتوانید رفتار دیداری و شنیداری را که برای همه اعلانهای آن کانال اعمال میشود، تنظیم کنید. کاربران میتوانند این تنظیمات را تغییر دهند و تصمیم بگیرند که کدام کانالهای اعلان از برنامه شما میتواند مزاحم یا قابل مشاهده باشد.
ویدیوی زیر را برای مروری بر کانال ها و سایر ویژگی های اعلان در اندروید 8.0 مشاهده کنید.
تنظیمات کاربر برای کانال های اعلان برای هر برنامه در تنظیمات سیستم موجود است، همانطور که در شکل 1 نشان داده شده است.
پس از ایجاد یک کانال اعلان، نمیتوانید رفتارهای اعلان را تغییر دهید. کاربر در آن نقطه کنترل کامل دارد. با این حال، همچنان میتوانید نام و توضیحات کانال را تغییر دهید.
برای هر نوع اعلانی که باید ارسال کنید یک کانال ایجاد کنید. همچنین میتوانید کانالهای اعلان ایجاد کنید تا انتخابهای کاربران را منعکس کند. برای مثال، میتوانید کانالهای اعلان جداگانه برای هر گروه مکالمه ایجاد شده توسط کاربر در یک برنامه پیامرسانی تنظیم کنید.
هنگامی که Android 8.0 (سطح API 26) یا بالاتر را هدف قرار می دهید، باید یک یا چند کانال اعلان را اجرا کنید. اگر targetSdkVersion
شما روی 25 یا پایینتر تنظیم شده باشد، وقتی برنامه شما روی Android 8.0 (سطح API 26) یا بالاتر اجرا میشود، مانند دستگاههای دارای Android 7.1 (سطح API 25) یا پایینتر عمل میکند.
برای ایجاد یک کانال اطلاع رسانی، مراحل زیر را دنبال کنید:
یک شی
NotificationChannel
با شناسه کانال منحصر به فرد، نام قابل مشاهده توسط کاربر و سطح اهمیت بسازید.به صورت اختیاری، توضیحاتی را که کاربر در تنظیمات سیستم می بیند با
setDescription()
مشخص کنید.کانال اعلان را با ارسال آن به
createNotificationChannel()
ثبت کنید.
مثال زیر نحوه ایجاد و ثبت کانال اطلاع رسانی را نشان می دهد:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
ایجاد مجدد یک کانال اعلان موجود با مقادیر اصلی آن هیچ عملیاتی را انجام نمی دهد، بنابراین هنگام راه اندازی یک برنامه می توانید با این کد تماس بگیرید.
بهطور پیشفرض، همه اعلانهای ارسالشده به یک کانال خاص، از رفتارهای دیداری و شنیداری تعریفشده توسط سطح اهمیت کلاس NotificationManagerCompat
، مانند IMPORTANCE_DEFAULT
یا IMPORTANCE_HIGH
استفاده میکنند. برای اطلاعات بیشتر در مورد سطوح اهمیت به بخش بعدی مراجعه کنید.
اگر میخواهید رفتارهای اعلان پیشفرض کانالتان را بیشتر سفارشی کنید، میتوانید روشهایی مانند enableLights()
، setLightColor()
و setVibrationPattern()
را در NotificationChannel
فراخوانی کنید. به یاد داشته باشید که پس از ایجاد کانال، نمی توانید این تنظیمات را تغییر دهید و کاربر کنترل نهایی بر فعال بودن این رفتارها را دارد.
همچنین میتوانید چندین کانال اعلان را در یک عملیات با فراخوانی createNotificationChannels()
ایجاد کنید.
اهمیت کانال بر سطح وقفه همه اعلانهای ارسال شده در کانال تأثیر میگذارد. آن را در سازنده NotificationChannel
با استفاده از یکی از پنج سطح اهمیت، از IMPORTANCE_NONE(0)
تا IMPORTANCE_HIGH(4)
مشخص کنید.
برای پشتیبانی از دستگاههایی که دارای Android 7.1 (سطح API 25) یا پایینتر هستند، باید setPriority()
برای هر اعلان با استفاده از یک ثابت اولویت از کلاس NotificationCompat
فراخوانی کنید.
ثابتهای اهمیت ( NotificationManager.IMPORTANCE_*
) و اولویت ( NotificationCompat.PRIORITY_*
) به گزینههای اهمیت قابل مشاهده توسط کاربر نشان داده میشوند، همانطور که در جدول زیر نشان داده شده است.
سطح اهمیت قابل مشاهده برای کاربر | اهمیت (اندروید 8.0 و بالاتر) | اولویت (اندروید 7.1 و پایین تر) |
---|---|---|
فوری صدا می دهد و به عنوان یک اعلان هدآپ ظاهر می شود. | IMPORTANCE_HIGH | PRIORITY_HIGH یا PRIORITY_MAX |
بالا صدا می دهد. | IMPORTANCE_DEFAULT | PRIORITY_DEFAULT |
متوسط صدا نمیده | IMPORTANCE_LOW | PRIORITY_LOW |
پایین صدا نمی دهد و در نوار وضعیت ظاهر نمی شود. | IMPORTANCE_MIN | PRIORITY_MIN |
هیچ کدام هیچ صدایی تولید نمی کند و در نوار وضعیت یا سایه ظاهر نمی شود. | IMPORTANCE_NONE | N/A |
همه اعلانها، صرفنظر از اهمیت، در مکانهای UI سیستم بدون وقفه، مانند کشوی اعلانها و بهعنوان نشان روی نماد راهانداز ظاهر میشوند، اگرچه میتوانید ظاهر نشان اعلان را تغییر دهید .
وقتی کانال را به NotificationManager
ارسال کردید، نمیتوانید سطح اهمیت را تغییر دهید. با این حال، کاربر می تواند در هر زمانی تنظیمات برگزیده خود را برای کانال های برنامه شما تغییر دهد.
برای اطلاعات در مورد انتخاب یک سطح اولویت مناسب، به "سطوح اولویت" در راهنمای طراحی اعلان ها مراجعه کنید.
کاربران می توانند تنظیمات کانال های اعلان، از جمله رفتارهایی مانند لرزش و صدای هشدار را تغییر دهند. اگر میخواهید تنظیماتی را که کاربر برای کانالهای اعلان شما اعمال میکند بدانید، این مراحل را دنبال کنید:
شی
NotificationChannel
با فراخوانیgetNotificationChannel()
یاgetNotificationChannels()
دریافت کنید.تنظیمات کانال خاص مانند
getVibrationPattern()
،getSound()
وgetImportance()
را پرس و جو کنید.
اگر تنظیمات کانالی را تشخیص دادید که فکر میکنید رفتار مورد نظر برای برنامه شما را مهار میکند، میتوانید به کاربر پیشنهاد دهید آن را تغییر دهد و عملی را برای باز کردن تنظیمات کانال، همانطور که در بخش بعدی نشان داده شده است، انجام دهد.
پس از ایجاد یک کانال اعلان، نمی توانید رفتارهای دیداری و شنیداری کانال اعلان را به صورت برنامه ای تغییر دهید. فقط کاربر می تواند رفتارهای کانال را از تنظیمات سیستم تغییر دهد. برای دسترسی آسان کاربران خود به این تنظیمات اعلان، موردی را در رابط کاربری تنظیمات برنامه خود اضافه کنید که این تنظیمات سیستم را باز می کند.
میتوانید تنظیمات سیستم را برای کانالهای اعلان با یک Intent
باز کنید که از عملکرد ACTION_CHANNEL_NOTIFICATION_SETTINGS
استفاده میکند.
به عنوان مثال، کد نمونه زیر نشان می دهد که چگونه می توانید کاربر را به تنظیمات یک کانال اعلان هدایت کنید:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
توجه داشته باشید که هدف به دو مورد اضافی نیاز دارد که نام بسته برنامه شما (همچنین به عنوان شناسه برنامه شناخته می شود) و کانالی که باید ویرایش شود را مشخص می کند.
میتوانید کانالهای اعلان را با فراخوانی deleteNotificationChannel()
حذف کنید. کد نمونه زیر نحوه تکمیل این فرآیند را نشان می دهد:
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
اگر می خواهید ظاهر کانال های خود را در رابط کاربری تنظیمات سازماندهی کنید، می توانید گروه های کانال ایجاد کنید. این ایده خوبی است زمانی که برنامه شما از چندین حساب کاربری مانند نمایه های کاری پشتیبانی می کند، زیرا به شما امکان می دهد برای هر حساب یک گروه کانال اعلان ایجاد کنید. به این ترتیب، کاربران به راحتی می توانند چندین کانال اعلان که نام های یکسانی دارند را شناسایی و کنترل کنند.
به عنوان مثال، یک برنامه شبکه اجتماعی ممکن است شامل پشتیبانی از حساب های شخصی و کاری باشد. در این سناریو، هر حساب ممکن است به چندین کانال اعلان با عملکردها و نامهای یکسان نیاز داشته باشد، مانند موارد زیر:
یک حساب شخصی با دو کانال:
نظرات جدید
توصیه ها را پست کنید
یک حساب تجاری با دو کانال:
نظرات جدید
توصیه ها را پست کنید
سازماندهی کانال های اعلان در گروه های هر حساب به کاربران اجازه می دهد بین آنها تمایز قائل شوند.
هر گروه کانال اعلان به یک شناسه نیاز دارد که باید در بسته شما منحصر به فرد باشد و همچنین یک نام قابل مشاهده برای کاربر. قطعه زیر نحوه ایجاد گروه کانال اعلان را نشان می دهد.
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
پس از ایجاد یک گروه جدید، می توانید setGroup()
را فراخوانی کنید تا یک شی NotificationChannel
جدید را با گروه مرتبط کنید.
وقتی کانال را به مدیر اعلان ارسال کردید، نمیتوانید ارتباط بین کانال اعلان و گروه را تغییر دهید.