我正在尝试为Android O版本实施通知。 我读过有关通知管理器和频道的内容。所以Android O仍然不想重现通知。在PostCreate方法的主要活动中我写了这个。
NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String CHANNEL_ID = "my_channel_01";
String CHANNEL_NAME = "my Channel Name";
int NOTIFICATION_ID = 1;
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent notificationPendingIntent = PendingIntent.getActivity(this, NOTIFICATION_ID,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationChannel notificationChannel = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
notificationChannel = new NotificationChannel(CHANNEL_ID,
CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
mNotifyManager.createNotificationChannel(notificationChannel);
}
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification myNotification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("You have been notify")
.setContentText("This is your Notifiaction Text")
.setSmallIcon(R.drawable.ic_donut_large_black_24dp)
.setChannel(CHANNEL_ID)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setContentIntent(notificationPendingIntent)
.setAutoCancel(true)
.setSound(alarmSound)
.build();
mNotifyManager.notify(NOTIFICATION_ID, myNotification);
Toast.makeText(this, "accepted", Toast.LENGTH_SHORT).show();
在为第26个API构建之后,它不会创建Notification,Toast消息,并且日志会告诉我:
W / Notification:对于音量控制以外的操作,不推荐使用流类型 W / Notification:请参阅setSound()的文档,了解使用什么来代替android.media.AudioAttributes来限定播放用例
如何处理这种错误?
UPD。经过一番调查,我发现26 api在通知构建器中使用了一些变化。现在它也接受了chanelid。所以26使用构建器有两个参数。
答案 0 :(得分:4)
在创建notification / notificationcompact对象时传递通道ID。
Notification.Builder(Context context, String channelId)
或
NotificationCompat.Builder(Context context, String channelId)
答案 1 :(得分:2)
您不应在通知构建器上使用setSound方法,而是使用创建的通知通道来设置这些设置。
notificationChannel.setSound(Uri sound, AudioAttributes audioAttributes);
答案 2 :(得分:2)
我也收到警告,但我注意到我实际上仍在收到通知(将其拉下托盘),只是它是静音的,并且未在系统栏中显示图标...
我看到您的重要性设置为低:对于某个频道(也是我的频道),NotificationManager.IMPORTANCE_LOW
不会播放声音,您需要将其设置为IMPORTANCE_HIGH
或{{1 }}才能真正看到和听到您的通知。
答案 3 :(得分:-3)
你的alarmSound应该是别的东西,而不是URI?