Multi-Device Synchronization for Do Not Disturb/Pinned Conversations
The IMLib SDK provides a conversation status (pinned or Do Not Disturb) synchronization mechanism. By setting up a conversation status synchronization listener, you can monitor real-time changes to conversation status when modified on other devices.
Prior to version 5.10.0, there were occasional inaccuracies in unread message counts. We recommend using version 5.10.0 or higher.
Listener Description
The RongIMClient provides a ConversationStatusListener. After setting up the listener, the following method will be triggered when conversation status (pinned or Do Not Disturb) changes:
public interface ConversationStatusListener {
void onStatusChanged(ConversationStatus[] conversationStatus);
}
The onStatusChanged method returns a list of conversationStatus with the following parameters:
Parameter Description
| Parameter | Type | Description |
|---|---|---|
| conversationType | ConversationType | Conversation type. |
| targetId | String | Conversation ID. |
| isTop | boolean | Whether the conversation is pinned. |
| level | PushNotificationLevel | Do Not Disturb level for the conversation. SDK version 5.2.5+ supports multi-device synchronization of Do Not Disturb levels. For detailed level descriptions, see Do Not Disturb Feature Overview. |
| notificationStatus | ConversationNotificationStatus | Conversation notification status. Only supports two states: Notify (1) or Do Not Disturb (0). |
Setting Up the Listener
Set up the multi-device synchronization listener for conversation status (pinned and Do Not Disturb).
Sample Code
// Synchronization listener
RongIMClient.ConversationStatusListener listener = new RongIMClient.ConversationStatusListener() {
@Override
public void onStatusChanged(ConversationStatus[] conversationStatus) {
if (conversationStatus == null) {
return;
}
for (ConversationStatus status : conversationStatus) {
Conversation.ConversationType conversationType = status.getConversationType(); // Get conversation type
String targetId = status.getTargetId(); // Get conversation ID
boolean isTop = status.isTop(); // Get whether the conversation is currently pinned
IRongCoreEnum.PushNotificationLevel level = status.getNotificationLevel(); // Get PushNotificationLevel (added in 5.2.5)
Conversation.ConversationNotificationStatus notificationStatus = status.getNotifyStatus(); // Get current Do Not Disturb status
}
}
};
RongIMClient.getInstance().setConversationStatusListener(listener); // Set up listener