2016-09-23 87 views
6

我是android編程的新手,我試圖通過使用firebase實現使用推送通知的簡單應用。我設置了Android項目(使用Android Studio 2.2),並且能夠在前臺應用程序中獲取通知,而不是在後臺。我有兩個類延伸FirebaseMessagingService(名爲MyFirebaseMessagingService)和FirebaseInstanceIdService(名爲MyFirebaseInstanceIDService)。從Firebase回調更新Android UI

在第一個我有方法onMessageReceived實現,當應用程序在前臺或當我收到「數據」標記作爲通知的一部分時觸發。所以我這裏面的代碼:

@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(); 
    } 

現在我的問題是更新使用上述變量「Cappello的」主佈局一個TextView。我怎樣才能做到這一點?我已經找到了一些使用不同類的例子,但它們都與這種情況有所不同。

何我可以觸發一個動作來更新主佈局的一些部分?例如一個texView?

回答

11

使用廣播接收器,並在你的活動,這被觸發註冊它,當新的信息出現

短的例子,在你FirebaseMessagingService :: onMessageReceived,你可能有這樣的:

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

然後在您的MainActivity,你實現一個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 
    } 
} 

在MainActivity中的onResume()註冊它:

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

好的。它工作正常。謝謝。 – mrcbis