2016-09-23 18 views
6

Tôi là người mới làm quen với lập trình Android và tôi đang cố gắng triển khai ứng dụng đơn giản sử dụng thông báo đẩy bằng firebase. Tôi thiết lập các dự án android (sử dụng Android Studio 2.2) folowing google tài liệu và tôi có thể nhận được thông báo cả với ứng dụng trong foreground hơn trong nền. Tôi có hai lớp mở rộng FirebaseMessagingService (có tên MyFirebaseMessagingService) và FirebaseInstanceIdService (có tên MyFirebaseInstanceIDService).Cập nhật giao diện người dùng Android từ gọi lại firebase

Trong trường hợp đầu tiên tôi có phương thức onMessageReceived được triển khai được kích hoạt khi ứng dụng ở nền trước hoặc khi tôi nhận được thẻ "dữ liệu" như một phần của thông báo. Vì vậy, tôi có đoạn mã này bên trong:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 

    if (remoteMessage.getNotification() != null) { 
     Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
     String cappello; 
     cappello = remoteMessage.getNotification().getBody(); 
    } 

Bây giờ vấn đề của tôi là để cập nhật một TextView trong cách bố trí chính bằng cách sử dụng "Cappello" biến nêu trên. Làm thế nào tôi có thể làm điều đó? Tôi đã tìm thấy một số ví dụ sử dụng các lớp khác nhau nhưng tất cả chúng dường như là một cái gì đó khác với trường hợp đó.

Tôi có thể kích hoạt hành động để cập nhật một số phần của bố cục chính? Một ví dụ texView?

Trả lời

11

Sử dụng một máy thu phát sóng và đăng ký nó trong hoạt động của bạn, nào được kích hoạt khi tin nhắn mới đến

dụ ngắn, Trong FirebaseMessagingService bạn :: onMessageReceived, bạn có thể có điều này:

cappello = remoteMessage.getNotification().getBody(); 
Intent intent = new Intent(); 
intent.putExtra("extra", cappello); 
intent.setAction("com.my.app.onMessageReceived"); 
sendBroadcast(intent); 

Sau đó, trong MainActivity của bạn, bạn thực hiện một BroadcastReceiver:

private class MyBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 
    String state = extras.getString("extra"); 
    updateView(state);// update your textView in the main layout 
    } 
} 

và đăng ký cho nó trong onResume() của MainActivity:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("com.my.app.onMessageReceived"); 
MyBroadcastReceiver receiver = new MyBroadcastReceiver(); 
registerReceiver(receiver, intentFilter); 
+0

Ok. Nó hoạt động tốt. Cảm ơn bạn. – mrcbis

Các vấn đề liên quan