简体   繁体   English

推送通知声音未播放应用程序在后台

[英]Push notification sound is not playing app is in background

when i am sending notification from firebase at that time when app is background then notification comes but notification sound is not play. 当我在应用程序处于后台的时候从Firebase发送通知时,通知来了,但是通知声音没有播放。 but when app is running at that time sound is playing. 但是当该应用运行时,声音正在播放。 And there is problem when i am sending notification to lower version app is closed please let me know is there any other solution here is my code 当我向较低版本的应用发送通知时出现问题,请关闭此代码,让我知道是否还有其他解决方案

this is my broadcast receiver 这是我的广播接收器

 mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
                    FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);
                } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {


                    pendingListAdapter = new PendingListAdapter(MainActivity.this, getPendingList(str_society_id, str_staff_id));
                    Functions.setDatatoRecyclerView(rv_pendings, pendingListAdapter, MainActivity.this);
                    String message = intent.getStringExtra("message");

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        NotificationManager mNotificationManager =
                                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                        int importance = mNotificationManager.IMPORTANCE_HIGH;
                        NotificationChannel mChannel = new NotificationChannel(Config.CHANNEL_ID, Config.CHANNEL_NAME, importance);
                        mChannel.setDescription(Config.CHANNEL_DESCRIPTION);
                        mChannel.enableLights(true);
                        mChannel.setLightColor(Color.RED);
                        mChannel.enableVibration(true);
                        Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                        Ringtone r = RingtoneManager.getRingtone(MainActivity.this, soundUri);
                        r.play();
                        mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});


                        mNotificationManager.createNotificationChannel(mChannel);
                        notificationUtils = new NotificationUtils(MainActivity.this);
                        notificationUtils.playNotificationSound();

                        MyNotificationManager.getInstance(MainActivity.this).displayNotification("Greetings", message);
                        Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();
                    } else {
                        Notification notification = new Notification.Builder(MainActivity.this)
                                .setCategory(Notification.CATEGORY_MESSAGE)
                                .setContentTitle("Greetings")
                                .setContentText(message)
                                .setSmallIcon(R.drawable.logo_app)
                                .setAutoCancel(true)

                                .setVisibility(Notification.VISIBILITY_PUBLIC).build();
                        NotificationManager notificationManager =
                                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                        notificationManager.notify(1, notification);
                        notificationUtils = new NotificationUtils(MainActivity.this);
                        notificationUtils.playNotificationSound();


                    }

                    notification_count = sharedPreferencesDatabase.getData(Config.NOTIFICATION_COUNT);
                    int i_notification_count = 0;
                    if (!TextUtils.isEmpty(notification_count) && !TextUtils.equals(notification_count, "null")) {
                        i_notification_count = Integer.parseInt(notification_count);
                    }

                    i_notification_count = i_notification_count + 1;
                    sharedPreferencesDatabase.addData(Config.NOTIFICATION_COUNT, "" + i_notification_count);

                    if (i_notification_count != 0) {
                        tv_notification_count.setVisibility(View.VISIBLE);
                        tv_notification_count.setText("" + i_notification_count);
                    } else {
                        tv_notification_count.setVisibility(View.GONE);
                    }
                }
            }
        }; 

this is my firebase FirebaseInstanceIdService 这是我的firebase FirebaseInstanceIdService

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();

    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        storeRegIdInPref(refreshedToken);

        sendRegistrationToServer(refreshedToken);

        Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE);
        registrationComplete.putExtra("token", refreshedToken);
        LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
    }

    private void sendRegistrationToServer(final String token) {
        // sending gcm token to server
        Log.e(TAG, "sendRegistrationToServer: " + token);
    }

    private void storeRegIdInPref(String token) {
        SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREFERENCE_DB_NAME, 0);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("regId", token);
        editor.commit();
    }
}

this is my FirebaseMessagingService 这是我的FirebaseMessagingService

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();

    private NotificationUtils notificationUtils;

    @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 the app is in background, firebase itself handles the notification
        }
    }

    private void handleDataMessage(JSONObject json) {
        Log.e(TAG, "push json: " + json.toString());

        try {
            JSONObject data = json.getJSONObject("data");

            String title = data.getString("title");
            String message = data.getString("message");
            boolean isBackground = data.getBoolean("is_background");
            String imageUrl = data.getString("image");
            String timestamp = data.getString("timestamp");
            JSONObject payload = data.getJSONObject("payload");

            Log.e(TAG, "title: " + title);
            Log.e(TAG, "message: " + message);
            Log.e(TAG, "isBackground: " + isBackground);
            Log.e(TAG, "payload: " + payload.toString());
            Log.e(TAG, "imageUrl: " + imageUrl);
            Log.e(TAG, "timestamp: " + timestamp);


            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 {
                // app is in background, show the notification in notification tray
                Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
                resultIntent.putExtra("message", message);

                // check for image attachment
                if (TextUtils.isEmpty(imageUrl)) {
                    showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent);
                } else {
                    // image is present, show notification with image
                    showNotificationMessageWithBigImage(getApplicationContext(), title, message, timestamp, resultIntent, imageUrl);
                }
            }
        } catch (JSONException e) {
            Log.e(TAG, "Json Exception: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }

    /**
     * Showing notification with text only
     */
    private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
    }

    /**
     * Showing notification with text and image
     */
    private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
    }
}

To Play an audio from your application when your app is in background you have to use Services. 要在后台运行应用程序中的音频时,您必须使用服务。 Check out this link : Android background music service 查看此链接: Android背景音乐服务

Have you tried enabling sound from console? 您是否尝试过从控制台启用声音? Have a look 看一看

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当应用在后台时,Firebase推送通知不会播放声音 - Firebase Push notification is not playing sound when app is in background Android 仅当应用程序处于前台时才播放推送通知声音,但当应用程序处于后台时不播放声音 - Android Push notification sound is played only when app is in foreground but not playing sound when app is in background 通知自定义声音在前台播放,但在后台应用程序时不播放 - Notification custom sound play in foreground but not playing while app in background FCM推送通知未显示应用程序何时打开,获得消息,但只是播放声音 - FCM push notification not showing when the app is opened, got message, but just playing sound 当应用未激活时,Android通知声音无法播放 - Android notification sound not playing when app is not active 自定义推送通知声音在奥利奥背景中不起作用 - Custom push notification sound not working in Oreo background 为什么当应用程序处于后台时声音不响(Android应用程序中的Firebase推送通知)? - Why Sound is not ringing when app is in background(Firebase Push Notification in Android app)? 自定义声音未在clevertap推送通知中播放反应原生Android项目 - Custom sound not playing in clevertap push notification react native android project android gcm推送通知只播放声音,不显示在顶部 - android gcm push notification playing only sound, not displaying at top 自定义通知声音无法播放 - Custom notification sound not playing
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM