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)
因此,广播接收器没有接收任何消息.
我还会使用任何其他不涉及使用广播接收器的方法.
您的流程或架构不是标准做法.
标准流程应该是
BroadcastReceiver使用LocalBroadcastManager1. 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.活动
注册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)写Receiver中Activity
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实例更新或添加项目
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |