wake-up-neo.com

Der Android Push-Benachrichtigungston wird nur dann abgespielt, wenn sich die App im Vordergrund befindet, jedoch nicht, wenn sich die App im Hintergrund befindet

Ich verwende FCM für die Push-Benachrichtigung Unterhalb des Codes, um den Ton abzuspielen, wenn eine Benachrichtigung eingeht 

 public void playNotificationSound() {
        try {

            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Ringtone r = RingtoneManager.getRingtone(mContext, notification);
            r.play();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Ich nenne diese OnMessageReceived-Methode, aber der Sound wird nur abgespielt, wenn sich die App im Vordergrund befindet, und nicht, wenn sich die App im Hintergrund befindet

 @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.e(TAG, "From: " + remoteMessage.getFrom());

        if (remoteMessage == null)
            return;

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
            handleNotification(remoteMessage.getNotification().getBody());
        }

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

            try {
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                handleDataMessage(json);
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
    }





 private void handleNotification(String message) {
        if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
            // app is in foreground, broadcast the Push message
            Intent pushNotification = new Intent(config.Push_NOTIFICATION);
            pushNotification.putExtra("message", message);
            LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);

            // play notification sound
            NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
            notificationUtils.playNotificationSound();
        }else if (NotificationUtils.isAppIsInBackground(getApplicationContext())){
            // If the app is in background, firebase itself handles the notification
            NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
            notificationUtils.playNotificationSound();
        }
    }
10
Santosh Yadav

Wenn Sie Benachrichtigungen über die Firebase Console in Android senden, wird dies als Notification - Nachricht behandelt. Benachrichtigungsnachrichten werden vom Android-Gerät (Taskleiste) immer automatisch verarbeitet, wenn sich die App im Hintergrund befindet (siehe Umgang mit Nachrichten ).

Was bedeutet, dass onMessageReceived() nicht aufgerufen wird. Wenn Sie also vor dem Empfang einer Benachrichtigung immer einen Sound abspielen möchten, müssen Sie stattdessen eine Data Message * verwenden. Sie müssen die Nachrichten jedoch ohne Verwendung der Firebase-Konsole senden.

6
AL.

Da onMessageReceived beim Senden eines Benachrichtigungsobjekts nicht aufgerufen wird, habe ich einen BroadcastReceiver erstellt, der behandelt werden soll, wenn eine Benachrichtigung eingeht

public class NotificationReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    playNotificationSound(context);
}

public void playNotificationSound(Context context) {
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(context, notification);
        r.play();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

und fügte es zu manifestieren. Der Empfänger ist dafür verantwortlich, einen Benachrichtigungsklingelton abzuspielen.

 <receiver
        Android:name=".notification.NotificationReceiver"
        Android:exported="true"
        Android:permission="com.google.Android.c2dm.permission.SEND" >
        <intent-filter>
            <action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </receiver>
6
kamiha

Sie müssen den Ton in Firebase Notification Composer unter Erweiterte Einstellungen aktivieren. :)

2
Zerocool

private void sendNotification (String messageBody, Intent Intent) {

    //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent/*.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)*/,
            PendingIntent.FLAG_ONE_SHOT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setContentIntent(pendingIntent);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);//<--

    Bitmap bitmap = getBitmapfromUrl(postImageUrl);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.notification_recive)


            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.notification_recive))
            .setContentTitle(postTitle + "")
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .setSummaryText(postTitle + "")
                    .bigPicture(bitmap))
            .setContentText(messageBody)
            .setLights(getResources().getColor(R.color.blue),1000,1500)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)//<--
            .setContentIntent(pendingIntent);


    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
0
Mr_Moradi

Sie haben bereits die Methode onMessageReceived, Firebase send vom Typ remoteMessage.getData (), wenn sich die Anwendung im Hintergrund befindet .. _. Der Ton wird also nur abgespielt, wenn sich die App im Vordergrund befindet, und nicht, wenn sich die App im Hintergrund befindet. Sie müssen hinzufügen 

if (remoteMessage.getData().size() > 0) {
        Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

        try {
            JSONObject json = new JSONObject(remoteMessage.getData().toString()); 
            handleNotification(json.getString("msg");//I am assuming message key is msg
            handleDataMessage(json);
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }
0
Himesh goswami