در Android 12.0 (سطح API ۳۱) و نسخههای جدیدتر، سیستم الگوی اعلان CallStyle را برای متمایز کردن اعلانهای تماس از انواع دیگر اعلانها ارائه میدهد. از این الگو برای ایجاد اعلانهای تماس ورودی یا
درحال برقراری استفاده کنید. این الگو از اعلانهای با قالب بزرگ پشتیبانی میکند که شامل اطلاعات تماسگیرنده و کنشهای لازم مانند پاسخ دادن یا رد کردن تماسها است.
چون تماسهای ورودی و درحال انجام رویدادهای با اولویت بالا هستند، این اعلانها در کشوی اعلانها بالاترین اولویت را دریافت میکنند. این رتبهبندی همچنین به سیستم امکان میدهد این تماسهای اولویتبندیشده را به دستگاههای دیگر بازارسال کند.
الگوی اعلان CallStyle شامل اقدامات الزامی زیر است:
- پاسخ دادن یا رد کردن برای تماسهای ورودی.
- قطع کردن برای تماسهای درحال انجام.
- پاسخ دادن یا قطع کردن برای غربال کردن تماس.
کنشها در این سبک بهصورت دکمه نشان داده میشوند و سیستم بهطور خودکار نمادها و نوشتار مناسب را اضافه میکند. برچسبگذاری دستی دکمهها پشتیبانی نمیشود. برای اطلاعات بیشتر درباره اصول طراحی اعلان، به اعلانها مراجعه کنید.
کنشهای لازم بهصورت هدف ارسال میشوند، مثل hangupIntent و
answerIntent در بخشهای زیر. هرکدام از اینها ارجاعی به یک
توکن است که توسط سیستم نگهداری میشود. این توکن شیء سبکی است که
میتواند بین برنامهها و فرایندهای مختلف منتقل شود. سیستم مسئول مدیریت طول عمر این کد و اطمینان از این است که PendingIntent قابلاستفاده باشد، حتی اگر برنامهای که آن را ایجاد کرده است دیگر درحال اجرا نباشد. وقتی به برنامه دیگری PendingIntent میدهید، به آن اجازه میدهید
عملیات مشخصشده را انجام دهد، مثلاً رد کردن یا پاسخ دادن.
این اجازه حتی اگر برنامهای که قصد را ایجاد کرده است درحال اجرا نباشد، اعطا میشود. برای اطلاعات بیشتر، به اسناد مرجع برای
PendingIntent مراجعه کنید.
از Android 14 (سطح API ۳۴) به بعد، میتوانید اعلانهای تماس را بهگونهای پیکربندی کنید که قابلبستن نباشند. برای انجام این کار، از اعلانهای CallStyle با
Notification.FLAG_ONGOING_EVENT ازطریق
Notification.Builder#setOngoing(true) استفاده کنید.
در زیر نمونههایی از استفاده از روشهای مختلف با اعلان CallStyle آورده شده است.
// Create a new call, setting incoming caller. val incomingCaller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
تماس ورودی
از روش forIncomingCall() برای ایجاد اعلان سبک تماس برای تماس ورودی استفاده کنید.
// For demonstrative purposes only, should use a well-defined Intents. val contentIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val declineIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) // Create a call style notification for an incoming call. val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forIncomingCall(incomingCaller, declineIntent, answerIntent)) .addPerson(incomingCaller)
تماس درحال انجام
از روش forOngoingCall() برای ایجاد اعلان سبک تماس برای تماس درحال انجام استفاده کنید.
// Create a call style notification for an ongoing call. val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent)) .addPerson(caller)
غربال کردن تماس
از روش forScreeningCall() برای ایجاد اعلان سبک تماس برای
غربال کردن تماس استفاده کنید.
// Create a call style notification for screening a call. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(caller)
سازگاری با نسخههای بیشتری از Android را فراهم کنید
اعلانهای CallStyle را در میانای برنامهسازی کاربردی نسخه ۳۰ یا قدیمیتر با سرویس پیشزمینهای مرتبط کنید تا بتوانید رتبه بالایی را که در میانای برنامهسازی کاربردی نسخه ۳۱ یا جدیدتر به آنها داده میشود به آنها اختصاص دهید. علاوهبراین، اعلانهای CallStyle در API نسخه ۳۰ یا قدیمیتر میتوانند با علامتگذاری اعلان بهعنوان رنگی بااستفاده از روش setColorized() به رتبهبندی مشابهی دست یابند.
از میاناهای برنامهسازی کاربردی Telecom با اعلانهای CallStyle استفاده کنید. برای اطلاعات بیشتر، به
نمای کلی چارچوب Telecom مراجعه کنید.