解决某些平台SDK内置消息没有注册的问题

This commit is contained in:
heavyrian2012
2025-11-06 18:31:12 +08:00
parent c9b2de076d
commit c7f1ea57dc
@@ -8,12 +8,39 @@ import cn.wildfirechat.sdk.utilities.ClassUtil;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class MessageContentFactory { public class MessageContentFactory {
private static final Map<Integer, Class<? extends MessageContent>> contentClassMap = new ConcurrentHashMap<>(); private static final Map<Integer, Class<? extends MessageContent>> contentClassMap = new ConcurrentHashMap<>();
private static List<Class> buildinMessageContents = Arrays.asList(
ArticlesMessageContent.class,
StreamTextGeneratedMessageContent.class,
CallStartMessageContent.class,
StreamTextGeneratingMessageContent.class,
CardMessageContent.class,
MultiCallOngoingMessageContent.class,
TextMessageContent.class,
DeleteMessageContent.class,
NotDeliveredMessageContent.class,
TipNotificationMessageContent.class,
FileMessageContent.class,
PTTSoundMessageContent.class,
TypingMessageContent.class,
ImageMessageContent.class,
RecallMessageContent.class,
UnknownMessageContent.class,
LinkMessageContent.class,
RichNotificationMessageContent.class,
VideoMessageContent.class,
LocationMessageContent.class,
SoundMessageContent.class,
StickerMessageContent.class
);
static { static {
registerAllMessageContent(); registerAllMessageContent();
} }
@@ -59,6 +86,15 @@ public class MessageContentFactory {
} }
private static void registerAllMessageContent() { private static void registerAllMessageContent() {
try {
for (Class buildinMessageContent : buildinMessageContents) {
MessageContent content = (MessageContent)buildinMessageContent.newInstance();
contentClassMap.put(content.getContentType(), buildinMessageContent);
}
} catch (Exception e) {
e.printStackTrace();
}
try { try {
for (Class cls : ClassUtil.getAllAssignedClass(MessageContent.class)) { for (Class cls : ClassUtil.getAllAssignedClass(MessageContent.class)) {
if(!Modifier.isAbstract(cls.getModifiers())) { if(!Modifier.isAbstract(cls.getModifiers())) {