NotificationChannel issue in Android O

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

I am getting a toast saying "Developer warning for package com.google.android.apps.messaging" when sending an MMS using Android Messages ver 2.3.063.

In logs

08-12 16:57:52.368  7661  7682 W Notification: Use of stream types is deprecated for operations other than volume control 08-12 16:57:52.368  7661  7682 W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case 08-12 16:57:52.369  1604  3146 E NotificationService: No Channel found for pkg=com.google.android.apps.messaging, channelId=miscellaneous, id=5, tag=null, opPkg=com.google.android.apps.messaging, callingUid=10130, userId=0, incomingUserId=0, notificationUid=10130, notification=Notification(channel=miscellaneous pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0xff2a56c6 vis=PRIVATE) 08-12 16:57:52.375  1604  3094 D CompatibilityInfo: mCompatibilityFlags - 0 08-12 16:57:52.375  1604  3094 D CompatibilityInfo: applicationDensity - 480 08-12 16:57:52.375  1604  3094 D CompatibilityInfo: applicationScale - 1.0 08-12 16:57:52.378  7661  7682 I BugleNotifications: Notifying for tag = null, type = RESIZING_NOTIFICATION_ID, notification = Notification(channel=miscellaneous pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0xff2a56c6 vis=PRIVATE) 08-12 16:57:52.381  7661  8893 W Notification: Use of stream types is deprecated for operations other than volume control 08-12 16:57:52.381  7661  8893 W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case 08-12 16:57:52.384  1604  1618 E NotificationService: No Channel found for pkg=com.google.android.apps.messaging, channelId=miscellaneous, id=5, tag=null, opPkg=com.google.android.apps.messaging, callingUid=10130, userId=0, incomingUserId=0, notificationUid=10130, notification=Notification(channel=miscellaneous pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0xff2a56c6 vis=PRIVATE) 08-12 16:57:52.384   880  1657 W StreamHAL: Error from HAL stream in function get_presentation_position: Operation not permitted 08-12 16:57:52.387  7661  8893 I BugleNotifications: Notifying for tag = null, type = RESIZING_NOTIFICATION_ID, notification = Notification(channel=miscellaneous pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0xff2a56c6 vis=PRIVATE) 08-12 16:57:52.390  1604  1647 E NotificationService: No Channel found for pkg=com.google.android.apps.messaging, channelId=miscellaneous, id=5, tag=null, opPkg=com.google.android.apps.messaging, callingUid=10130, userId=0, incomingUserId=0, notificationUid=10130, notification=Notification(channel=miscellaneous pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x48 color=0xff2a56c6 vis=PRIVATE) 

Google Play services ver 11.3.02
Android Messages 2.3.063
Android 8.0.0

Anyone up there to help me ?

回答1:

As it is written in Android Documentation:

https://developer.android.com/preview/features/notification-channels.html

If you target Android O and post a notification without specifying a valid notifications channel, the notification fails to post and the system logs an error.

To solve this issue you need to create a NotificationChannel.

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  // The id of the channel. String id = "my_channel_01";  // The user-visible name of the channel. CharSequence name = getString(R.string.channel_name);  // The user-visible description of the channel. String description = getString(R.string.channel_description);  int importance = NotificationManager.IMPORTANCE_LOW;  NotificationChannel mChannel = new NotificationChannel(id, name,importance);  // Configure the notification channel. mChannel.setDescription(description);  mChannel.enableLights(true); // Sets the notification light color for notifications posted to this // channel, if the device supports this feature. mChannel.setLightColor(Color.RED);  mChannel.enableVibration(true); mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});  mNotificationManager.createNotificationChannel(mChannel); 

And then assign it to your Notification like this:

mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);  // Sets an ID for the notification, so it can be updated. int notifyID = 1;  // The id of the channel. String CHANNEL_ID = "my_channel_01";  // Create a notification and set the notification channel. Notification notification = new Notification.Builder(MainActivity.this)     .setContentTitle("New Message")     .setContentText("You've received new messages.")     .setSmallIcon(R.drawable.ic_notify_status)     .setChannelId(CHANNEL_ID)     .build();  // Issue the notification. mNotificationManager.notify(id, notification); 

Update:

In case you want to use NotificationCompat here is a simple example:

NotificationCompat.Builder mBuilder; mBuilder = new NotificationCompat.Builder(getApplicationContext())     .setSmallIcon(R.mipmap.ic_launcher_icon)     .setContentTitle("Title")     .setContentText("Text")     .setOngoing(true)     .setChannelId(id); 

In fact you have to use Notification Builder in order to set channel id via setChannelId();



回答2:

Another possible solution is to drop your targetSdkVersion to 25. Recent API levels have only brought sticks and no carrots. There are few reasons for developers to target newer apis.



回答3:

Messages on Toast and Logcat talk about you should be paid attention to 2 items and them order:

  1. NotificationChannel mChannel = new NotificationChannel(id, name, importance);
  2. builder = new NotificationCompat.Builder(this, id);

Also NotificationManager notifManager and NotificationChannel mChannel are created only once.

There are required setters for Notification:

builder.setContentTitle() // required          .setSmallIcon()    // required         .setContentText()  // required   

See the example in On Android 8.1 API 27 notification does not display.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!