Android O通知未显示

时间:2017-09-01 14:16:43

标签: android notifications android-8.0-oreo

我正在尝试为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使用构建器有两个参数。

4 个答案:

答案 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?