Как увидеть толчок тела в деятельности? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть эта проблема:

Отправка push-сообщения через панель PHP с помощью action_click .Активность открывается, но на ней белый экран.

Как мне перенести туда данные: Заголовок, Сообщение, Изображение (если есть, если нет, то по умолчанию)

Заранее большое спасибо, если вы можете дать мне рабочую версию, как это реализовать.

Извините за мой очень плохой английский, я русский.

public class MyFirebaseMessagingService extends FirebaseMessagingService {

     private static final String TAG = "MyFirebaseMsgingService";
private static final String TITLE = "title";
private static final String EMPTY = "";
private static final String MESSAGE = "message";
private static final String IMAGE = "image";
private static final String ACTION = "action";
private static final String DATA = "data";
private static final String ACTION_DESTINATION = "action_destination";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        Map<String, String> data = remoteMessage.getData();
        handleData(data);

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

}
private void handleNotification(RemoteMessage.Notification RemoteMsgNotification) {
    String message = RemoteMsgNotification.getBody();
    String title = RemoteMsgNotification.getTitle();
    NotificationVO notificationVO = new NotificationVO();
    notificationVO.setTitle(title);
    notificationVO.setMessage(message);

    Intent resultIntent = new Intent(getApplicationContext(), PushTest.class);
    NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
    notificationUtils.displayNotification(notificationVO, resultIntent);
    notificationUtils.playNotificationSound();
}

private void handleData(Map<String, String> data) {
    String title = data.get(TITLE);
    String message = data.get(MESSAGE);
    String iconUrl = data.get(IMAGE);
    String action = data.get(ACTION);
    String actionDestination = data.get(ACTION_DESTINATION);
    NotificationVO notificationVO = new NotificationVO();
    notificationVO.setTitle(title);
    notificationVO.setMessage(message);
    notificationVO.setIconUrl(iconUrl);
    notificationVO.setAction(action);
    notificationVO.setActionDestination(actionDestination);

    Intent resultIntent = new Intent(getApplicationContext(), PushTest.class);

    NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
    notificationUtils.displayNotification(notificationVO, resultIntent);
    notificationUtils.playNotificationSound();

}


}

Как я могу отобразить данные в моей деятельности?Активность откройте через action_click как PushTest и увидите там только белый экран

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Я предлагаю вам использовать широковещательный приемник вместо намерения в вашей Деятельности и услуге:

Установите Намерение , которое содержит менеджер вещания в вашем классе FirebaseMessagingService, вы можете использовать LocalBroadcastManager для этого.

Например:

Intent intent = new Intent("BROADCAST_MESSAGE_RECEIVED");
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

Создайте экземпляр вашего BroadcastReceiver в вашем Activity:

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context broadcastContext, Intent intent) {
        // Extract data from your intent in here 
        getData(intent);
    }
};

Затем в вашем Activity классе зарегистрируйте и отмените регистрацию вашего BroadcastReceiver:

@Override
protected void onResume() {
    super.onResume();

    //Register local broadcast receiver for notifications after receiving message
    LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver,
            new IntentFilter("BROADCAST_MESSAGE_RECEIVED"));
}

@Override
protected void onPause() {
    super.onPause();

    // Unregister broadcast receiver
    LocalBroadcastManager.getInstance(this)
            .unregisterReceiver(mBroadcastReceiver);
}
0 голосов
/ 16 ноября 2018
Intent resultIntent = new Intent(this, PushTest.class);
resultIntent.putExtra("title", title);
resultIntent.putExtra("message", message);
resultIntent.putExtra("iconUrl", iconUrl);
startActivity(resultIntent);

А в моей деятельности

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pushtest);
    txtTitle = (TextView) findViewById(R.id.textView3);
    txtMessage = (TextView) findViewById(R.id.textView3);
    Intent resultIntent = getIntent();

    String title = resultIntent.getStringExtra("title");
    String message = resultIntent.getStringExtra("message");
    String iconUrl = resultIntent.getStringExtra("iconUrl");
    txtTitle.setText(title);
    txtMessage.setText(message);
}
...