3
votes

I am adding custom sound for my application. The custom ringtone is playing when the application is in the foreground but the custom sound is not playing when the application is in background.

  private void sendMyNotification(String message) {

    Intent intent = new Intent(this, BaseActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    Uri soundUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" + R.raw.ring);


    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "CH_ID")
            .setSmallIcon(R.mipmap.iconfinal)
            .setContentTitle(getString(R.string.app_name))
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(soundUri)
            .setContentIntent(pendingIntent);

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

        if(soundUri != null){
            // Changing Default mode of notification
            notificationBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
            // Creating an Audio Attribute
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_ALARM)
                    .build();

            // Creating Channel
            NotificationChannel notificationChannel = new NotificationChannel("CH_ID","Testing_Audio",NotificationManager.IMPORTANCE_HIGH);
            notificationChannel.setSound(soundUri,audioAttributes);
            mNotificationManager.createNotificationChannel(notificationChannel);
        }
    }
    mNotificationManager.notify(1, notificationBuilder.build());
}
1
I am already tried so many code. please help me to resolve.Anuj Itarsia

1 Answers

0
votes

First you need to pass your sound file name from server side. like below example:

{
  "to": "firebase_notification_token",
  "notification": {
    "title": "Push notification title",
    "body": "Push body",
    "sound": "filename", <-- point to src/res/raw/filename.mp3
  }
}

You need to add below code to play custom sound while app is in background.

val channelId = getString(R.string.app_name)
    val NOTIFICATION_SOUND_URI =
        Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + BuildConfig.APPLICATION_ID + "/" + R.raw.filename)
    val notificationBuilder = NotificationCompat.Builder(this, channelId)

val notification: Notification
notification = notificationBuilder.setSmallIcon(R.drawable.ic_logo_white).setTicker(getString(R.string.app_name)).setWhen(0)
    .setAutoCancel(true)
    .setContentTitle(getString(R.string.app_name))
    .setSound(NOTIFICATION_SOUND_URI)
    .setSmallIcon(R.mipmap.ic_launcher)
    .setContentText(messageBody)
    .build()

For more detail refer to this Document. Thanks to Ilya Eremin for great article.