نمایش اعلان های حساس به زمان

ممکن است برنامه شما در موقعیت‌های خاص، مانند زنگ هشدار مداوم یا تماس ورودی، نیاز داشته باشد که فوراً توجه کاربر را جلب کند. در برنامه‌هایی که دستگاه‌هایی را هدف قرار می‌دهند که اندروید ۹ (سطح API 28) یا قبل از آن را اجرا می‌کنند، می‌توانید با راه‌اندازی یک فعالیت در حالی که برنامه در پس‌زمینه است، این کار را انجام دهید. این سند نحوه دستیابی به این رفتار را در دستگاه‌هایی که اندروید ۱۰ (سطح API 29) تا اندروید ۱۳ (سطح API 33) را اجرا می‌کنند، نشان می‌دهد.

مجوز POST_NOTIFICATIONS را اضافه کنید

با شروع از اندروید ۱۳، خط زیر را به فایل AndroidManifest.xml خود اضافه کنید:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

وقتی این را داشته باشید، می‌توانید یک کانال اعلان ایجاد کنید.

ایجاد کانال اطلاع رسانی

یک کانال اعلان ایجاد کنید تا اعلان‌های شما به درستی نمایش داده شوند و به کاربر اجازه دهید اعلان‌ها را در تنظیمات برنامه مدیریت کند. برای اطلاعات بیشتر در مورد کانال‌های اعلان، به «ایجاد و مدیریت کانال‌های اعلان» مراجعه کنید.

کانال‌های اعلان خود را در متد onCreate کلاس Application خود ایجاد کنید:

کاتلین

class DACapp : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

وقتی کاربر برای اولین بار برنامه شما را اجرا می‌کند، چیزی شبیه به شکل ۱ را در صفحه سیستم اطلاعات برنامه شما مشاهده می‌کند:

تصویری که اطلاعات برنامه و صفحه اعلان برنامه شما را نشان می‌دهد.
شکل ۱. بخش اعلان‌ها در صفحه اطلاعات برنامه در تنظیمات سیستم برنامه.

مدیریت مجوزهای اعلان‌ها

از اندروید ۱۳ به بعد، قبل از نمایش اعلان‌ها به کاربران، مجوزهای اعلان را درخواست کنید.

حداقل پیاده‌سازی به این شکل است:

کاتلین

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

اگر دستگاه شما اندروید ۱۳ را اجرا می‌کند، ضربه زدن روی دکمه Request permission ، پنجره‌ای که در شکل ۲ نشان داده شده است را فعال می‌کند:

تصویری که پنجره درخواست مجوز را نشان می‌دهد
شکل ۲. پنجره‌ی محاوره‌ای سیستم برای درخواست مجوز اعلان.

اگر کاربر درخواست مجوز را بپذیرد، بخش اطلاعات برنامه مانند شکل ۳ خواهد بود:

تصویری که صفحه اطلاعات برنامه را پس از اعطای درخواست مجوز اعلان نشان می‌دهد
شکل ۳. مجوزهای اعلان اعطا شده.

ایجاد یک اعلان با اولویت بالا

هنگام ایجاد اعلان، یک عنوان و پیام توصیفی درج کنید.

مثال زیر شامل یک اعلان است:

کاتلین

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

    notificationManager.notify(666, notificationBuilder.build())
}

نمایش اعلان به کاربر

فراخوانی تابع showNotification() اعلان را به صورت زیر فعال می‌کند:

کاتلین

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

اعلان در این مثال مانند شکل ۴ است:

تصویری که یک اعلان با اولویت بالا را نشان می‌دهد
شکل ۴. یک اعلان با اولویت بالا.

اطلاع رسانی مداوم

وقتی اعلان خود را به کاربر نمایش می‌دهید، او می‌تواند هشدار یا یادآوری برنامه شما را تأیید یا رد کند. برای مثال، کاربر می‌تواند تماس تلفنی ورودی را بپذیرد یا رد کند.

اگر اعلان شما مداوم است، مانند یک تماس تلفنی ورودی، اعلان را به یک سرویس پیش‌زمینه مرتبط کنید. قطعه کد زیر نحوه نمایش یک اعلان مرتبط با یک سرویس پیش‌زمینه را نشان می‌دهد:

کاتلین

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

جاوا

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification);