0

I can't set custom notification sound and vibration pattern for android oreo and above. For earlier versions of android everything works as it should. I wrote my code based on these answers: Custom notification sound , android Oreo?,
Custom Notification Sound not working in Android Oreo and others. But none of this had the desired result. The notification comes, but without sound and vibration. The values of isSoundEnabled and isVibrationEnabled are transmitted correctly.

My method:

   private void sendNotif(String title, String text, boolean isSoundEnabled, boolean isVibrationEnabled) {

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

        String channelName = "EEE";
        String channelId = "CHANNEL_1";
        long[] vibrationPattern = new long[]{40, 75, 75, 75, 75, 75, 75, 750};
        long[] vibrationEmpty = new long[]{0};
        Uri soundUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.notification);

        Intent intent = new Intent(context, ActivityOne.class);
        PendingIntent pIntent = PendingIntent
                .getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        NotificationCompat.Builder builder;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            builder = new NotificationCompat.Builder(context, channelId)
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle(title)
                            .setContentText(text)
                            .setPriority(NotificationCompat.PRIORITY_MAX)
                            .setAutoCancel(true)
                            .setContentIntent(pIntent);

            NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH);

            channel.enableLights(true);

            if (isSoundEnabled) {
                AudioAttributes audioAttributes = new AudioAttributes
                        .Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                        .build();
                channel.setSound(soundUri, audioAttributes);
            } else {
                channel.setSound(null, null);
            }

            channel.enableVibration(isVibrationEnabled);

            if (isVibrationEnabled){
                channel.setVibrationPattern(vibrationPattern);
            } else {
                channel.setVibrationPattern(vibrationEmpty);
            }
            notificationManager.createNotificationChannel(channel);
            builder.setChannelId(channelId);


        } else {

            builder = new NotificationCompat.Builder(context, channelName)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(title)
                    .setContentText(text)
                    .setPriority(NotificationCompat.PRIORITY_MAX)
                    .setAutoCancel(true)
                    .setContentIntent(pIntent);

            if (isSoundEnabled) {
                builder.setSound(soundUri);
            }
            if (isVibrationEnabled) {
                builder.setVibrate(vibrationPattern);
            } else {
                builder.setVibrate(vibrationEmpty);
            }
        }

        notificationManager.notify(new Random().nextInt(10000), builder.build());
    }

What am I doing wrong?

bruno13
  • 1
  • 1
  • Note that a `NotificationChannel` is write-once; you cannot modify it once it is created. You may wish to fully uninstall and reinstall your app, then see if your channel works better. – CommonsWare Oct 07 '22 at 20:21
  • @CommonsWare, It didn't work for me. – bruno13 Oct 07 '22 at 20:27

1 Answers1

0

Figured it out. The checks if (isSoundEnabled) and if (isVibrationEnabled) were unnecessary. To control vibration and notification sounds on android oreo+, you need to create separate channels.

bruno13
  • 1
  • 1