开发者客户以将图片发送到自己的服务器,具体步骤如下:
第一步:继承ConversationFragment,重写onImageResult,在这个方法里面获取到所选择的图片的URL集合
第二步:构造消息实例ImageMessage imageMessage = ImageMessage.obtain(thumbPathUri, localPathUri);
Message message = Message.obtain(targetId, conversationType, imageMessage);
第三步:发送图片:/**
*
发送图片消息,可以使用该方法将图片上传到自己的服务器发送,同时更新图片状态。
*
使用该方法在上传图片时,会回调 {@link io.rong.imlib.RongIMClient.SendImageMessageWithUploadListenerCallback}
* 此回调中会携带 {@link RongIMClient.UploadImageStatusListener} 对象,使用者只需要调用其中的
* {@link RongIMClient.UploadImageStatusListener#update(int)} 更新进度
* {@link RongIMClient.UploadImageStatusListener#success(Uri)} 更新成功状态,并告知上传成功后的图片地址
* {@link RongIMClient.UploadImageStatusListener#error()} 更新失败状态
*
* @param message 发送消息的实体。
* @param pushContent 当下发 push 消息时,在通知栏里会显示这个字段。
* 如果发送的是自定义消息,该字段必须填写,否则无法收到 push 消息。
* 如果发送 sdk 中默认的消息类型,例如 RC:TxtMsg, RC:VcMsg, RC:ImgMsg,则不需要填写,默认已经指定。
* @param pushData push 附加信息。如果设置该字段,用户在收到 push 消息时,能通过 {@link io.rong.push.notification.PushNotificationMessage#getPushData()} 方法获取。
* @param callback 发送消息的回调,回调中携带 {@link RongIMClient.UploadImageStatusListener} 对象,用户调用该对象中的方法更新状态。
* {@link #sendImageMessage(Message, String, String, RongIMClient.SendImageMessageCallback)}
*/
RongIM.getInstance().sendImageMessage(message, pushContent, pushData, new RongIMClient.SendImageMessageWithUploadListenerCallback() { @Override
public void onAttached(Message message, final RongIMClient.UploadImageStatusListener uploadImageStatusListener) { /*上传图片到自己的服务器*/
uploadImg(imgMsg.getPicFilePath(), new UploadListener() { @Override
public void onSuccess(String url) { // 上传成功,回调 SDK 的 success 方法,传递回图片的远端地址
uploadImageStatusListener.success(Uri.parse(url));
} @Override
public void onProgress(float progress) { //刷新上传进度
uploadImageStatusListener.update((int) progress);
} @Override
public void onFail() { // 上传图片失败,回调 error 方法。
uploadImageStatusListener.error();
}
});
} @Override
public void onError(Message message, RongIMClient.ErrorCode errorCode) { //发送失败
} @Override
public void onSuccess(Message message) { //发送成功
} @Override
public void onProgress(Message message, int progress) { //发送进度
}
});
注意:SDK没有发送网络的图片接口,因为发送图片需要携带缩略图,如果不是本地图片,就没有办法得到缩略图。