01. tháng 2 2025
Tài liệu của Easemob thực sự không đáng tin cậy, cần phải liên tục tìm kiếm các giải pháp. !Tích hợp chức năng trò chuyện Easemob vào Weex Android, trang danh sách cuộc trò chuyện
Hệ thống điện thoại phiên bản 6.0 cần phải yêu cầu quyền hạn động.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" [tu vi 12 con giap](/blog/minecraft-first-time-experience/) />
Môi trường Android 6.0 trở lên sẽ bị sập nếu không xử lý đúng cách, vì Google đã thêm tính năng quyền hạn động từ phiên bản 6.0 để tăng cường bảo mật, tức là các thao tác nhạy cảm cần được người dùng chấp thuận. Sao chép thư mục runtimepermissions của ví dụ Easemob vào dự án, sau đó thêm đoạn mã dưới đây vào ConversationListActivity:
/**
* Yêu cầu tất cả các quyền cần thiết - nguyên tắc là lấy các quyền đã khai báo trong tệp manifest
*/
PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this, new PermissionsResultAction() {
@Override
public void onGranted() {
// Toast.makeText(MainActivity.this, "Tất cả quyền đã được cấp", Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(String permission) {
//Toast.makeText(MainActivity.this, "Quyền " + permission + " đã bị từ chối", Toast.LENGTH_SHORT).show();
}
});
conversation.getUserName()
Cần sửa thành:
conversation.conversationId()
Lý do là vì SDK Easemob phiên bản 3.3.3 đã cập nhật tên phương thức, haha...
Liệu có liên quan đến việc layout không có điểm gắn? Đúng vậy.
getSupportFragmentManager().beginTransaction().add(R.id.container, conversationListFragment).commit();
Điều này cho thấy rằng Fragment cần có một điểm gắn tương ứng trong layout.
gói com.alibaba.weex;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.alibaba.weex.runtimepermissions.PermissionsManager;
import com.alibaba.weex.runtimepermissions.PermissionsResultAction;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.hyphenate.easeui.EaseConstant;
import com.hyphenate.chat.EMConversation;
import com.hyphenate.easeui.ui.EaseConversationListFragment;
public class ConversationListActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation_list);
/**
* Yêu cầu tất cả các quyền cần thiết - nguyên tắc là lấy các quyền đã khai báo trong tệp manifest
*/
PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this, new PermissionsResultAction() {
@Override
public void onGranted() {
// Toast.makeText(MainActivity.this, "Tất cả quyền đã được cấp", Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(String permission) {
//Toast.makeText(MainActivity.this, "Quyền " + permission + " đã bị từ chối", Toast.LENGTH_SHORT).show();
}
});
EMClient.getInstance().login("test1", "123456", new EMCallBack() { // Gọi lại
@Override
public void onSuccess() {
EMClient.getInstance().groupManager().loadAllGroups();
EMClient.getInstance().chatManager().loadAllConversations();
Log.d("main", "Đăng nhập vào máy chủ trò chuyện thành công!");
}
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(int code, String message) {
Log.d("main", "Đăng nhập vào máy chủ trò chuyện thất bại!");
}
});
EaseConversationListFragment conversationListFragment = new EaseConversationListFragment();
getSupportFragmentManager().beginTransaction().add(R.id.container, conversationListFragment).commit();
conversationListFragment.setConversationListItemClickListener(new EaseConversationListFragment.EaseConversationListItemClickListener() {
@Override
public void onListItemClicked(EMConversation conversation) {
startActivity(new Intent(ConversationListActivity.this, ConversationActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.conversationId()));
}
});
}
}