web-dev-qa-db-fra.com

NotificationManagerCompat sur Android Oreo

Existe-t-il un moyen de définir des canaux sur Android Oreo avec NotificationManagerCompat et NotificationCompat?

10

Comme NotificationManagerCompat est juste une classe d’emballage facilitant la vie, vous pouvez créer les canaux normalement:

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)
}

Et utilisez ensuite la NotificationManagerCompat lorsque vous publiez les notifications, mais n'oubliez pas de construire la notification à l'aide du nouveau constructeur:

NotificationCompat.Builder(context, CHANNEL_ID)
13

J'utilise habituellement cette classe pour gérer les canaux de notification:

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)
    }
}

Ensuite, vous pouvez utiliser util comme ceci

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)
    }
}

De cette façon, vous pouvez l’utiliser à n’importe quel endroit de votre application avec la signature, comme vous l’avez fait auparavant, et vous pouvez facilement le changer en cas de modifications ultérieures. 

5
A. Shevchuk

Existe-t-il un moyen de définir des canaux sur Android Oreo lors de l’utilisation de NotificationManagerCompat?

NotificationManagerCompatnow prend en charge les canaux de notification. La nouvelle version a ajouté les méthodes de canaux de notification à NotificationManagerCompat afin que les développeurs ne puissent utiliser que NotificationManagerCompat lorsqu'ils utilisent des notifications.

Inclure les éléments suivants dans votre fichier build.gradle

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

0
Darish