如何在Android环信中实现消息发送进度提示?
在Android环信中实现消息发送进度提示,是提升用户体验的重要一环。当用户发送消息时,能够实时地看到消息的发送进度,不仅能够增加用户的信心,还能提高应用的交互性。本文将详细介绍如何在Android环信中实现消息发送进度提示,包括所需依赖、实现步骤和代码示例。
一、所需依赖
环信SDK:在项目中引入环信SDK,用于实现消息发送和接收功能。
Gson:用于解析JSON数据。
OkHttp:用于网络请求。
二、实现步骤
- 初始化环信SDK
在AndroidManifest.xml中添加以下权限:
在项目的build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.hyphenate:hyphenatesdk:2.9.4'
}
- 配置环信SDK
在主Activity中,初始化环信SDK:
public class MainActivity extends AppCompatActivity {
private static final String APP_ID = "your_app_id";
private static final String APP_KEY = "your_app_key";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化环信SDK
EMClient.getInstance().init(this, APP_ID, APP_KEY, new EMOptions());
}
}
- 实现消息发送进度提示
在发送消息时,通过监听消息状态来实现发送进度提示。以下是一个简单的示例:
// 发送消息
Message message = Message.createTextMessage("Hello, world!", "your_conversation_id");
message.setMessageStatusCallback(new EMMessage.MessageStatusCallback() {
@Override
public void onMessageSendError(ErrorMessage errorMessage) {
// 消息发送失败
Toast.makeText(MainActivity.this, "消息发送失败:" + errorMessage.getDescription(), Toast.LENGTH_SHORT).show();
}
@Override
public void onMessageDelivered(EMMessage message) {
// 消息已送达
Toast.makeText(MainActivity.this, "消息已送达", Toast.LENGTH_SHORT).show();
}
@Override
public void onMessageRead(EMMessage message) {
// 消息已读
Toast.makeText(MainActivity.this, "消息已读", Toast.LENGTH_SHORT).show();
}
@Override
public void onMessageAck(EMMessage message) {
// 消息已确认
Toast.makeText(MainActivity.this, "消息已确认", Toast.LENGTH_SHORT).show();
}
@Override
public void onMessageChanged(EMMessage message, Object change) {
// 消息状态发生变化
if (change instanceof MessageBody) {
// 消息内容发生变化
Toast.makeText(MainActivity.this, "消息内容发生变化", Toast.LENGTH_SHORT).show();
} else if (change instanceof MessageStatus) {
// 消息状态发生变化
MessageStatus status = (MessageStatus) change;
switch (status) {
case CREATE:
// 消息创建
Toast.makeText(MainActivity.this, "消息创建", Toast.LENGTH_SHORT).show();
break;
case SENDING:
// 消息发送中
Toast.makeText(MainActivity.this, "消息发送中", Toast.LENGTH_SHORT).show();
break;
case SUCCESS:
// 消息发送成功
Toast.makeText(MainActivity.this, "消息发送成功", Toast.LENGTH_SHORT).show();
break;
case FAIL:
// 消息发送失败
Toast.makeText(MainActivity.this, "消息发送失败", Toast.LENGTH_SHORT).show();
break;
case INVISIBLE:
// 消息已撤回
Toast.makeText(MainActivity.this, "消息已撤回", Toast.LENGTH_SHORT).show();
break;
}
}
}
});
EMClient.getInstance().chatManager().sendMessage(message);
- 自定义发送进度提示
为了更好地展示发送进度,可以自定义发送进度提示。以下是一个简单的自定义发送进度提示的实现:
// 自定义发送进度提示布局
public class ProgressView extends View {
private Paint paint;
private int progress = 0;
public ProgressView(Context context) {
super(context);
init();
}
private void init() {
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int radius = Math.min(width, height) / 2;
canvas.drawCircle(radius, radius, radius, paint);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
float sweepAngle = (float) progress / 100 * 360;
canvas.drawArc(width / 2 - radius, height / 2 - radius, width / 2 + radius, height / 2 + radius, 0, sweepAngle, true, paint);
}
public void setProgress(int progress) {
this.progress = progress;
invalidate();
}
}
在发送消息时,创建一个ProgressView实例,并设置其进度值:
// 创建发送进度提示
ProgressView progressView = new ProgressView(MainActivity.this);
progressView.setProgress(0);
// 设置进度值
int maxProgress = 100;
for (int i = 0; i <= maxProgress; i++) {
progressView.setProgress(i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 发送消息
Message message = Message.createTextMessage("Hello, world!", "your_conversation_id");
message.setMessageStatusCallback(new EMMessage.MessageStatusCallback() {
// ... (省略其他方法)
@Override
public void onMessageChanged(EMMessage message, Object change) {
// ... (省略其他方法)
if (change instanceof MessageStatus) {
MessageStatus status = (MessageStatus) change;
if (status == MessageStatus.SENDING) {
// 消息发送中,更新进度值
progressView.setProgress(i);
}
}
}
});
EMClient.getInstance().chatManager().sendMessage(message);
通过以上步骤,您可以在Android环信中实现消息发送进度提示。在实际应用中,可以根据需求对进度提示进行优化和扩展,以提升用户体验。
猜你喜欢:IM服务