Access data from Firebase Service in main thread

一曲冷凌霜 提交于 2019-12-25 08:28:36

问题


I am programming an app that receives some data from a FCM message, then updates the UI based on the data payload contained in the message.

The service runs fine, and receives the data, but I cant figure out how to get it back to my main activity.

The Firebase service is declared in my manifest as

<service android:name=".MyFirebaseService">
   <intent-filter>
       <action android:name="com.google.firebase.MESSAGING_EVENT" />
   </intent-filter>
</service>

In my MyFirebaseService class I have overridden the onMessageReceived method, but how am I supposed to notify my main activity that a message was received?

Is there a handler I can use with the Firebase service?


回答1:


dev.android.com > Develop > Training > Background Jobs > Reporting Work Status

https://developer.android.com/training/run-background-service/report-status.html

To send the status of a work request in an IntentService to other components, first create an Intent that contains the status in its extended data.

Next, send the Intent by calling LocalBroadcastManager.sendBroadcast(). This sends the Intent to any component in your application that has registered to receive it.

Intent localIntent = new Intent(BROADCAST_ACTION).putExtra(DATA_STATUS, status);
LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);

To receive broadcast Intent objects, use a subclass of BroadcastReceiver. In the subclass, implement the BroadcastReceiver.onReceive() callback method, which LocalBroadcastManager invokes when it receives an Intent. LocalBroadcastManager passes the incoming Intent to BroadcastReceiver.onReceive().

To register the BroadcastReceiver and the IntentFilter with the system, get an instance of LocalBroadcastManager and call its registerReceiver() method.

 LocalBroadcastManager.getInstance(this)
     .registerReceiver(mDownloadStateReceiver, statusIntentFilter);



回答2:


here is my messaging handle

Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("title", fcmTitle);
    intent.putExtra("summary", fcmSummary);
    intent.putExtra("message", fcmMessage);
    intent.putExtra("imageUrl", fcmImageUrl);
    intent.putExtra("goto", fcmGoto);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(App.getAppContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);

you can have something like this to listen in main activity

Boolean bolGoto = false;
    if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            //String value = getIntent().getExtras().getString(key);
            if (key.equals("goto")){
                bolGoto = true;
            }
        }
    }
    if (bolGoto){
        handleFCMNotification(getIntent());
    }


来源:https://stackoverflow.com/questions/42403990/access-data-from-firebase-service-in-main-thread

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!