Reputation: 41
I have below payload push notification, send from my server. The notification work in all version, but the sound don't work only on Android Oreo, other Android versions work fine.
{
"to" : "d4DLcrilLbs...",
"notification" : {
"body" : "This is an FCM notification message!",
"title" : "FCM Message",
"sound" : "new_sound.wav"
}
}
Upvotes: 4
Views: 1521
Reputation: 139
package com.example.notification;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.media.AudioAttributes;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import androidx.core.app.NotificationCompat;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
NotificationManager mNotificationManager;
NotificationCompat.Builder mBuilder;
Context mContext;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
sendNotification(remoteMessage.getNotification().getBody());
}
@Override
public void onNewToken(String token) {
Log.d(TAG, "Refreshed token: " + token);
sendRegistrationToServer(token);
}
private void handleNow() {
Log.d(TAG, "Short lived task is done.");
}
private void sendRegistrationToServer(String token) {
// TODO: Implement this method to send token to your app server.
}
private void sendNotification(String message) {
Intent resultIntent=new Intent(getApplicationContext(),MainActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(),
0 /* Request code */, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Uri uri = Uri.parse("android.resource://" + getApplicationContext()
// .getPackageName() + "/" + R.raw.mix);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
mBuilder = new NotificationCompat.Builder(getApplicationContext());
mBuilder.setSmallIcon(R.drawable.ic_launcher_background);
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher_background));
mBuilder.setContentTitle(message)
.setContentText(message)
.setSound(soundUri)
.setLights(100,200,300)
.setAutoCancel(false)
.setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
.setColor(Color.GREEN)
.setStyle(new NotificationCompat.BigTextStyle())
.setContentIntent(resultPendingIntent)
.setOnlyAlertOnce(true);
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel("541201134433333", "MYGET", importance);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.enableVibration(true);
notificationChannel.setShowBadge(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
// notificationChannel.s
if (soundUri != null) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
notificationChannel.setSound(soundUri, audioAttributes);
}
assert mNotificationManager != null;
mBuilder.setChannelId("541201134433333");
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
}
}
Upvotes: 0
Reputation:
Notification in Android oreo needs to be registered under the channel otherwise you will not able to generate a notification.
Check out the following article might help you
Upvotes: 0
Reputation: 356
In oreo you have to set sound with channal
Please change your code with this
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)
{
final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
+ "://" + this.getPackageName() + "/raw/notification");
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build();
NotificationChannel channel = new NotificationChannel("MyNotification","MyNotification", NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(alarmSound,attributes);
NotificationManager mgr =getSystemService(NotificationManager.class);
mgr.createNotificationChannel(channel);
}
it will work either your app is in background/foreground
Upvotes: 2