# 消息
## 发送消息
```
QDResultCallBack 是全局的接口,主要用于用户调用接口是否成功
public interface QDResultCallBack<T> {
void onError (String errorMsg); //失败 errorMsg表示失败信息
void onSuccess(T t); //成功 T表示成功后返回的对象
}
/**
* 发送个人文本消息
* @param user 聊天对象
* @param content 内容
* @param callBack 监听
* @return
*/
sendPersonMessage(QDUser user, String content, QDResultCallBack callBack)
/**
* 发送群组文本消息
* @param group 群组对象
* @param content 内容
* @param callBack 监听
* @return QDMessage 返回消息对象
*/
QDMessage sendGroupMessage(QDGroup group, String content, QDResultCallBack callBack)
/**
* 重发个人信息
* @param message 消息对象
* @param callBack 监听
*/
resendPersonMessage(QDMessage message, QDResultCallBack callBack)
/**
* 重发群组信息
* @param message 消息对象
* @param callBack 监听
*/
resendGroupMessage(QDMessage message, QDResultCallBack callBack)
/**
* 发送个人信息
* @param user 聊天对象
* @param message 消息对象
* @param callBack
*/
sendMessage(QDUser user, QDMessage message, QDResultCallBack callBack)
/**
* 个人消息转发
* @param user 转发对象
* @param message 转发消息对象
* @param callBack
*/
forwardMessage(QDUser user, QDMessage message, QDResultCallBack callBack)
/**
* 群组消息转发
* @param group 转发群组对象
* @param message 转发消息对象
* @param callBack
*/
public void forwardGMessage(QDGroup group, QDMessage message, QDResultCallBack callBack)
/**
* 发送位置信息
* @param user 聊天对象
* @param locInfo 定位信息("经度;纬度;详细地址;简要地址")
* @param callBack
* @return QDMessage 返回消息对象
*/
QDMessage sendLocationMessage(QDUser user, String locInfo, QDResultCallBack callBack)
/**
* 发送群组位置消息
* @param group 群组对象
* @param locInfo 定位信息("经度;纬度;详细地址;简要地址")
* @param callBack
* @return QDMessage 返回消息对象
*/
QDMessage sendGLocationMessage(QDGroup group, String locInfo, QDResultCallBack callBack)
```
## 接收消息
```
群组消息是每个群组接收的消息,所以返回接收消息的会有群组id,个人消息接收是全部通过一个接口,接收的时候需要判断消息的发送者和接收者是否是聊天的双方
消息接收 QDMessageCallBack
//个人消息接收
void onReceive(List<QDMessage> message);
//群组消息接收
void onReceiveGMsg(String groupId, List<QDMessage> messageList);
//消息设置已读
void onMsgReaded(String userId);
//撤回消息返回
void onRevokeMessage(String msgId, String errorMsg);
在需要接受消息的页面的onCreate方法中添加消息监听
QDGroupCallBackManager.getInstance().addCallBack(this);
```
## 消息相关对象
消息对象 QDMessage
```
//消息状态
MSG_STATUS_SENDING // 发送中
MSG_STATUS_SEND_OK // 发成功
MSG_STATUS_SEND_FAILED // 发送失败
MSG_STATUS_READ_ACK // 发送的消息对方已读回执
MSG_STATUS_RECEIVE // 接收的消息
//消息方向(判断是发送的还是接收的)
DIRECTION_OUT //发送的消息
DIRECTION_IN //接收的消息
//消息类型
MSG_TYPE_TEXT // 文本消息
MSG_TYPE_RICH_TEXT // 富文本消息
MSG_TYPE_IMAGE // 图片
MSG_TYPE_FILE // 文件
MSG_TYPE_AUDIO // 音频
MSG_TYPE_VIDEO // 视频
MSG_TYPE_LOCATION // 位置
MSG_TYPE_LINK // 链接消息
MSG_TYPE_NOTIFY // 个人通知
MSG_TYPE_CANCEL // 撤回消息
MSG_TYPE_VOICE //语音消息
MSG_TYPE_SHOOT //小视频
MSG_TYPE_CMD = "cmd";
MSG_TYPE_CONFIRM //签收消息
MSG_TYPE_CONFIRMED //确认签收消息
//消息读取状态
MSG_UNREAD //未读
MSG_READED //已读
MSG_IGNORE //已读红点还在
//消息文件状态
MSG_FILE_STATUS_UPLOADING //文件正在上传
MSG_FILE_STATUS_UPLOADED //文件上传成功
MSG_FILE_STATUS_UPLOAD_FAILED //文件上传失败
MSG_FILE_STATUS_UNDOWNLOAD //文件还没有下载
MSG_FILE_STATUS_DOWNLOADED//文件下载成功
MSG_FILE_STATUS_DOWNLOAD_FAILED //文件下载失败
String msgId; //消息ID
String cid; //会话id(服务器数据会有关联和本地的会话id无关联)
int ctype; //会话类型(0:私聊 1:群聊 2:群发 3:应用 4:通知)
String cdata; //会话数据(只有应用消息会用到该属性)
int msgNumber; //消息标识(群聊批量接收和读取会用到)
int senderMsgNumber;
int status; //消息发送状态和接收状态
int direction; //消息是发出去的还是收到的
int isRead; //消息是否已读(多设备同步时用)
String groupId; //群组id(只有群聊中会用到该属性)
String msgType; //消息类型
int msgFlag; //消息标识
long createDate; //消息创建时间(微秒级)
String subject; //消息主题(主要是在会话页面中显示)
String content; //消息内容
String contentType; //消息内容类型
String senderId; //发送者id
String senderName; //发送者姓名
String senderSsid; //发送者ssid
String receiverId; //接收者id
String receiverName; //接受者姓名
String attachment; //附件信息
String extData; //扩展数据
String extType; //扩展数据类型
String filePath; //消息文件本地存储地址(记录发送出去的和已下载的文件路径)
String extData1; //扩展数据
int fileStatus; //文件状态
String receiverUsers; //群发的所有接受者信息
int count;
```
## 消息相关数据库操作
```
/**
* 删除表数据
*/
QDMessageHelper.deleteTable()
/**
* 插入一个消息
*
* @param message
*/
QDMessageHelper.insertMessage(QDMessage message)
/**
* 插入一组消息
*
* @param messages
*/
QDMessageHelper.insertMessageList(List<QDMessage> messages)
/**
* 获取和某人的聊天消息
*
* @param userId 聊天对象id
* @return List<QDMessage>
*/
QDMessageHelper.getMessageWithUserId(String userId)
/**
* 获取和自己设备的聊天消息
* @param userId 登陆者id
* @return List<QDMessage>
*/
QDMessageHelper.getMessageWithSelfId(String userId)
/**
* 获取和某人time之前的limit条消息
* @param userId 聊天对象id
* @param time 时间(毫秒)
* @param limit 条数
* @return List<QDMessage>
*/
QDMessageHelper.getMessageLimitWithUserIdBeforeTime(String userId, long time, int limit)
/**
* 获取和默认time之后的limit条消息
* @param userId 聊天对象id
* @param time 时间(毫秒)
* @param limit 条数
* @return List<QDMessage>
*/
QDMessageHelper.getMessageLimitWithUserIdAfterTime(String userId, long time, int limit)
/**
* 删除和某人的聊天消息
*
* @param userId 聊天对象id
*/
QDMessageHelper.deleteMessageWithUserId(String userId)
/**
* 删除和某个群的聊天
*
* @param groupId 群组id
*/
QDMessageHelper.deleteMessageWithGroupId(String groupId)
/**
* 删除某个应用的消息
*
* @param appId 应用id
*/
QDMessageHelper.deleteMessageWithAppId(String appId)
/**
* 获取和某人的图片集合
*
* @param userId 用户id
* @return List<QDMessage>
*/
QDMessageHelper.getImageListWithUserId(String userId)
/**
* 获取某群的图片集合
*
* @param groupId
* @return List<QDMessage>
*/
QDMessageHelper.getImageListWithGroupId(String groupId)
/**
* 获取某个群组的聊天消息
*
* @param groupId
* @return List<QDMessage>
*/
QDMessageHelper.getMessageWithGroupId(String groupId)
/**
* 返回某个群组固定的条数
* @param groupId
* @return List<QDMessage>
*/
QDMessageHelper.getMessageLimitWithGroupId(String groupId)
/**
* 根据群组id获取time之前的limit条消息
* @param groupId 群组id
* @param time 时间(毫秒)
* @param limit 条数
* @return List<QDMessage>
*/
QDMessageHelper.getMessageLimitWithGroupIdBeforeTime(String groupId, long time, int limit)
/**
* 根据群组id获取time之后的limit条消息
* @param groupId 群组id
* @param time 时间(毫秒)
* @param limit 条数
* @return List<QDMessage>
*/
QDMessageHelper.getMessageLimitWithGroupIdAfterTime(String groupId, long time, int limit)
/**
* 更新消息
* @param message 消息对象
*/
QDMessageHelper.updateMessage(QDMessage message)
/**
* 获取未读消息数量
*
* @return int
*/
QDMessageHelper.getUnreadMessageCount()
/**
* 获取个人未读消息数量
* @return int
*/
QDMessageHelper.getPersonUnreadMessageCount()
/**
* 获取群组未读消息数量
*/
QDMessageHelper.getGroupUnreadMessageCount()
/**
* 获取和某人的未读消息数量
*
* @param userId 用户id
* @return int
*/
QDMessageHelper.getUnreadMessageCountWithUserId(String userId)
/**
* 获取和自己的设备的未读消息数量
* @return int
*/
QDMessageHelper.getUnreadMessageCountWithMyPc(String userId)
/**
* 获取某群的未读消息数量
*
* @param groupId 群组id
* @return int
*/
QDMessageHelper.getUnreadMessageCountWithGroupId(String groupId)
/**
* 获取应用的未读消息数量
*
* @param appId 应用id
* @return int
*/
QDMessageHelper.getUnreadMessageCountWithAppId(String appId)
/**
* 根据id获取消息
*
* @param msgId 消息id
* @return QDMessage
*/
QDMessageHelper.getMessageById(String msgId)
/**
* 搜索个人消息
*
* @param userId 登陆登陆者id
* @param searchText 搜索字符串
* @return List<QDMessage>
*/
QDMessageHelper.searchPersonalMessage(String userId, String searchText)
/**
* 搜索群组消息
*
* @param searchText 搜索字符串
* @return List<QDMessage>
*/
QDMessageHelper.searchGroupMessage(String searchText)
/**
* 搜索和某人的聊天记录
*
* @param chatId 用户id
* @param searchText 搜索字符串
* @return List<QDMessage>
*/
QDMessageHelper.searchMessageWithChatId(String chatId, String searchText)
/**
* 搜索和某群的聊天记录
*
* @param groupId 群组id
* @param searchText 搜索字符串
* @return List<QDMessage>
*/
QDMessageHelper.searchMessageWithGroupId(String groupId, String searchText)
/**
* 获取和某人的最后一条消息
*
* @param userId 用户id
* @return QDMessage
*/
QDMessageHelper.getLastMessageWithUserId(String userId)
/**
* 获取和pc端的最后一条消息
*
* @param userId 登陆者id
* @return QDMessage
*/
QDMessageHelper.getLastMessageWithSelfId(String userId)
/**
* 获取某个群组的最后一条聊天
*
* @param groupId 群组id
* @return QDMessage
*/
QDMessageHelper.getLastMessageWithGroupId(String groupId)
/**
* 删除消息列表
*
* @param messageList 消息列表
*/
QDMessageHelper.deleteMessageList(List<QDMessage> messageList)
/**
* 删除消息列表
*
* @param idList 删除消息id列表
*/
QDMessageHelper.deleteMessageByIdList(List<String> idList)
/**
* 删除消息
*
* @param msgId 消息id
*/
QDMessageHelper.deleteMessageById(String msgId)
/**
* 获取文件消息
* @return List<QDMessage>
*/
QDMessageHelper.getFileMessage()
```