web-dev-qa-db-de.com

NotificationManagerCompat für Android Oreo

Gibt es eine Möglichkeit, Kanäle für Android Oreo festzulegen, wenn Sie NotificationManagerCompat und NotificationCompat verwenden?

10

Da NotificationManagerCompat nur eine Wrapper-Klasse ist, die das Leben einfacher macht, können Sie die Kanäle normal erstellen:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val name = getString(R.string.channel_title)
    val description = getString(R.string.channel_description)
    val importance = NotificationManager.IMPORTANCE_HIGH
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = description
    mChannel.enableLights(true)
    mChannel.lightColor = Color.parseColor("#5B3C88")
    mChannel.enableVibration(true)
    mChannel.vibrationPattern = longArrayOf(100, 200, 300, 400, 500, 400, 300, 200, 400)
    val manager = (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager)
    manager.createNotificationChannel(mChannel)
}

Verwenden Sie dann die Variable NotificationManagerCompat, wenn Sie die Benachrichtigungen posten. Vergessen Sie jedoch nicht, die Benachrichtigung mit dem neuen Konstruktor zu erstellen:

NotificationCompat.Builder(context, CHANNEL_ID)
13

Ich verwende diese Klasse normalerweise zum Verwalten von Benachrichtigungskanälen:

class NotificationManager(private val context: Context) {

    companion object {
        private val CHANNEL_ID = "YOUR_CHANNEL_ID"
        private val CHANNEL_NAME = "Your human readable notification channel name"
        private val CHANNEL_DESCRIPTION = "description"
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun getMainNotificationId(): String {
        return CHANNEL_ID
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun createMainNotificationChannel() {
            val id = CHANNEL_ID
            val name = CHANNEL_NAME
            val description = CHANNEL_DESCRIPTION
            val importance = Android.app.NotificationManager.IMPORTANCE_LOW
            val mChannel = NotificationChannel(id, name, importance)
            mChannel.description = description
            mChannel.enableLights(true)
            mChannel.lightColor = Color.RED
            mChannel.enableVibration(true)
            val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as Android.app.NotificationManager
            mNotificationManager.createNotificationChannel(mChannel)
    }
}

Dann können Sie util so verwenden

fun createNotificationCompatBuilder(context: Context): NotificationCompat.Builder {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        return NotificationCompat.Builder(context, NotificationManager(context).mainNotificationId)
    } else {
        return NotificationCompat.Builder(context)
    }
}

Auf diese Weise können Sie es an jeder Stelle Ihrer Anwendung mit der Signatur verwenden, die Sie zuvor verwendet haben, und Sie können sie bei zukünftigen Änderungen problemlos ändern. 

5
A. Shevchuk

Gibt es eine Möglichkeit, bei Verwendung von NotificationManagerCompat Kanäle für Android Oreo festzulegen?

NotificationManagerCompatnow unterstützt Benachrichtigungskanäle. Die neue Version fügte Benachrichtigungskanäle zu NotificationManagerCompat hinzu, sodass Entwickler beim Arbeiten mit Benachrichtigungen nur NotificationManagerCompat verwenden können.

Fügen Sie Folgendes in Ihre build.gradle -Datei ein

implementation 'androidx.core.app:1.1.0-alpha03'

0
Darish