在接收Firebase消息时,在RecyclerView Adapter中添加列表项

Rel*_*elm 1 java service android firebase firebase-cloud-messaging

我正在使用firebase消息传递服务进行消息传递和通知.我似乎无法将传入的消息从服务传递到适配器,以便在收到消息时可以将其插入到RecycleView列表中.

我尝试使用BroacastIntent如下:

public class messaging extends FirebaseMessagingService {

   @Override
   public void onMessageReceived(RemoteMessage m) {
      store(m.getData());
      broadcastIntent();
   }

   public void broadcastIntent() {
      Intent intent = new Intent();
      intent.setAction("com.myApp.CUSTOM_EVENT");
      sendBroadcast(intent);
   }
}
Run Code Online (Sandbox Code Playgroud)

并在Adpter

public class ConvoAdapter extends RecyclerView.Adapter<ConvoHolder> {

   private List<Message> list;
   private Activity      A;

   public ConvoAdapter(List<Message> data) {

   }

   @Override
   public ConvoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
      return new ConvoHolder(v);
   }

   @Override
   public void onBindViewHolder(ConvoHolder h, int Position) {
      final Message M = list.get(Position);
      h.config(A, M);
   }

    @Override
    public int getItemCount() {
       return list.size();
    }

    public class MyReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
             Toast.makeText(context, "Intent Detected.",    Toast.LENGTH_LONG).show();
          }
    }
}
Run Code Online (Sandbox Code Playgroud)

并表现出来.

<receiver android:name=".fragments.chats.ConvoAdapter$MyReceiver"
                  android:enabled="true"
                  android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.CUSTOM_EVENT">
                </action>
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

因此,广播接收器没有接收任何消息.

我还会使用任何其他不涉及使用广播接收器的方法.

Aks*_*iya 9

您的流程或架构不是标准做法.

标准流程应该是

  1. Firebase服务
  2. 一些活动或片段BroadcastReceiver使用LocalBroadcastManager

1. Firebase服务

public class messaging extends FirebaseMessagingService {

   @Override
   public void onMessageReceived(RemoteMessage m) {
      store(m.getData());
      broadcastIntent();
   }

  public void broadcastIntent() {
      Intent intent = new Intent();
      intent.setAction("com.myApp.CUSTOM_EVENT");
      // We should use LocalBroadcastManager when we want INTRA app
      // communication
      LocalBroadcastManager.getInstance(YOUR_CONTEXT).sendBroadcast(intent);
  }
}
Run Code Online (Sandbox Code Playgroud)

2.活动

  1. 注册Receiver广播Service

     public void onCreate(Bundle savedInstance) {
           // REST OF YOUR CODE
           IntentFilter if= new IntentFilter("com.myApp.CUSTOM_EVENT");
           LocalBroadcastManager.getInstance(this).registerReceiver(onMessage, if);
      }
    
    Run Code Online (Sandbox Code Playgroud)
  2. ReceiverActivity

    private BroadcastReceiver onNotice= new BroadcastReceiver() {        
          @Override
          public void onReceive(Context context, Intent intent) {        
                 // Update your RecyclerView here using notifyItemInserted(position);
          }};
    
    Run Code Online (Sandbox Code Playgroud)

    };

摘要:Service发送本地广播Activity,然后接收它并使用RecyclerView实例更新或添加项目