web-dev-qa-db-fra.com

Notification.Builder (contexte) obsolète Android O

Notification.Builder (context) a été récemment déconseillé avec l'emplacement de Notification Channels dans Android O.

PROBLÈME:

Après avoir utilisé Notification.Builder(context, StringID) au lieu de Notification.Builder(context), j'ai reçu une notification à mon Android O appareil.
Cependant, après avoir essayé cela sur un Android 23 (M), je n'ai pas reçu de notification. J'ai débogué mon code et il a simplement cessé de s'exécuter une fois que le débogueur a atteint la ligne. Notification.Builder (contexte, StringID) sur Android 23 (M).

CORRECTIF:

Pour résoudre ce problème, j’ai utilisé la condition if/else pour séparer les appareils Android O et le reste des autres appareils.

J'ai l'extrait de code suivant:

Notification.Builder notificationBuilder;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    notificationBuilder = new Notification.Builder(mContext,
            mContext.getResources().getString(R.string.notification_id_channel));
} else {
    notificationBuilder = new Notification.Builder(mContext);
}

Lint in Android Studio affiche la ligne de désapprobation suivante:

enter image description here

QUESTION:

Y a-t-il un moyen de se débarrasser de cette ligne d'avertissement de dépréciation?

24
Red M

Votre solution consiste à utiliser NotificationCompat.Builder(Context context, String channelId). Si vous utilisez ceci, vous n'avez pas à vérifier le niveau de l'API, le générateur ignore l'ID de canal sur les périphériques pré-Oreo.

Je l'ai testé sur les API 15, 22, 23 et 26 et il fonctionne parfaitement.

38
Wess

Vous devez définir un identifiant de canal unique (par exemple, "MyChannelId_01") et appeler NotificationCompat.Builder (ctx, "MyChannelId_01"). La notification construite sera publiée sur ce NotificationChannel "MyChannelId_01".

Cela vous permet de définir l’importance de la notification (elle contrôle le mode de notification des interruptions sur ce canal. La valeur est IMPORTANCE_UNSPECIFIED, IMPORTANCE_NONE, IMPORTANCE_MIN, IMPORTANCE_LOW, IMPORTANCE_DEFAULT ou IMPORTANCE_HIGH).

Vous pouvez trouver un exemple ici: Création d'un canal de notification

2
Christian

J'avais le même problème et depuis que je cible Android 22 et 24, je viens de faire ceci: NotificationCompat.Builder notification = new NotificationCompat.Builder (MainActivity.this, "")

Je suis sûr que quelqu'un dira que c'est un bidouillage, mais il élimine l'avertissement et je n'ai aucun problème.

Semble passer une chaîne vide fonctionne pour <Android 26.

Peut-être que quelqu'un d'autre peut dire si cela cause des problèmes pour 26.

Merci

1
user3365935