Android如何快速集成环信EaseUI(最强修改版)
来源:互联网 发布:ubuntu anaconda 卸载 编辑:程序博客网 时间:2024/06/13 04:30
最近项目中要求实现即时通讯的功能,于是就找到了环信的即时通讯。
下面我就来分享一下如何简单快速的集成环信EaseUI以及我在集成中遇到的问题。
ps:想要快速方便的集成最好不要按照官方文档的要求来做,因为你会发现全是坑啊!!!无力吐槽……
- 首先:我们需要到官网去注册并创建应用。会生成我们自己的AppKey,这个需要记下来,我们会在Manifest文件中写入我们自己的AppKey。(不同app之间聊天只需要把appkey写成一样的就可以)
- 然后下载SDK
登录到环信的官网首页–>下载–>即时通讯云,然后选择下载Android的SDK+Demo。
下载完成后的文件夹 - 然后我们需要打开examples文件夹将easeui文件夹导入AS中(AS中:File–>New–>ImportModule,然后选择easeui对应的路径即可(注意导入AS中的时候要把build.gradle文件删除))。
之后我们需要将easeui同步到我们的项目中 - 点击后然后ok就可以了。ps:这里需要值得一提的是在导入和同步的过程中,我们要尽量把easeui的grale版本修改为和我们自己工程的版本一致,不然会很容易出错。
一丶代码部分(按照官方文档在Manifest文件中添加对应的权限以及添加我们自己的AppKey):<!-- Required -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<-------------------------------------------------华丽的分割线------------------------------------->
<!-- 设置环信应用的AppKey -->
<meta-data android:name="EASEMOB_APPKEY" android:value="Your AppKey" />
<!-- 声明SDK所需的service SDK核心功能-->
<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
<service android:name="com.hyphenate.chat.EMJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>
<!-- 声明SDK所需的receiver -->
<receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
<!-- 可选filter -->
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
代码部分:
初始化EaseUI:
我们需要在项目最开始运行的时候对其进行初始化,所以要写在appication里(注意不要忘记去manifests文件中注册)
public class MyApp extends Application{ @Override public void onCreate() { super.onCreate(); EaseUI.getInstance().init(this, null); EMClient.getInstance().setDebugMode(true); }}
登录注册界面(布局自己随意画就可以),下面是我写的Demo(注意环信的聊天必须登录,不然会发送消息失败)
注册的方法,这里需要注意的是这步是异步操作,所以我们需要把它写在子线程中
//注册的方法 异步 public void register(){ new Thread(new Runnable() { @Override public void run() { try { EMClient.getInstance().createAccount(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim()); Log.e("MainActivity", "注册成功"); } catch (HyphenateException e) { e.printStackTrace(); Log.e("MainActivity", "注册失败"); } } }).start(); }``//登录的方法 public void login(){ EMClient.getInstance().login(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim(), new EMCallBack() { @Override public void onSuccess() { startActivity(new Intent(MainActivity.this,TalkActivity.class)); } @Override public void onError(int i, String s) { } @Override public void onProgress(int i, String s) { } }); }
这个是退出的方法,哪里需要写哪里~~~
private void logout() {
EMClient.getInstance().logout(false, new EMCallBack() {
@Override
public void onSuccess() {
startActivity(new Intent(getContext(),MainActivity.class));
getActivity().finish();
}
@Override public void onError(int i, String s) { } @Override public void onProgress(int i, String s) { }});
}
//启动会话列表 EaseConversationListFragment conversationListFragment = new EaseConversationListFragment(); conversationListFragment.setConversationListItemClickListener(new EaseConversationListFragment.EaseConversationListItemClickListener() { @Override public void onListItemClicked(EMConversation conversation) { Log.e("TalkActivity", EaseConstant.EXTRA_USER_ID +" "+ conversation.conversationId()); startActivity(new Intent(TalkActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.conversationId())); } });
官方文档给出的是conversation.getUserName(),但是不知道我的为什么没有这个方法,后来研究发现返回的就是这个conversationId,所以直接填入就可以了
这里还要说一下的是:不是非要跳转到activity界面,因为easeui’的聊天界面就是EaseChatFragment,需要什么时候启动,只需要传入固定参数就可以了(这块好久才弄明白…)
ChatActivity:
public class ChatActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); EaseChatFragment chatFragment = new EaseChatFragment(); //传入参数 chatFragment.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit(); }}
跳转到联系人界面(坑来了~~~~)
//直接启动联系人列表 contactListFragment = new EaseContactListFragment();//需要设置联系人列表才能启动fragment new Thread(new Runnable() { @Override public void run() { contactListFragment.setContactsMap(getContacts()); } }).start();
你会发现这样写完并没有显示联系人,这是因为我们需要再添加好友申请后的回调中再设置一遍联系人并且刷新一下 ps:这是个巨坑~~~当时集成的时候已然崩溃!!!
在其下方添加如下代码:
EMClient.getInstance().contactManager().setContactListener(new EMContactListener() { @Override public void onContactAdded(String s) { Log.e("TalkActivity", s); new Thread(new Runnable() { @Override public void run() { contactListFragment.setContactsMap(getContacts()); contactListFragment.refresh(); } }).start(); } @Override public void onContactDeleted(String s) { } @Override public void onContactInvited(String s, String s1) { } @Override public void onFriendRequestAccepted(String s) { } @Override public void onFriendRequestDeclined(String s) { } }); }
/** * 获取联系人 * * @return */ private Map<String, EaseUser> getContacts() { Map<String, EaseUser> map = new HashMap<>(); try { List<String> userNames = EMClient.getInstance().contactManager().getAllContactsFromServer();// KLog.e("......有几个好友:" + userNames.size()); for (String userId : userNames) {// KLog.e("好友列表中有 : " + userId); map.put(userId, new EaseUser(userId)); } } catch (HyphenateException e) { e.printStackTrace(); } return map; }
到这里我们就可以实现简单的即时通讯功能了~~~如果还有什么需求只需要自己添加就可以了。
运行一下:
注意:
1,百度地图会和easeui冲突
2,发送定位或者打开大图的时候程序会崩掉,这是因为我们没有在Manifest文件中注册easeui中的两个Activity。
初次接触IM,希望大家包涵~
后续会写出自定义消息扩展(类似发名片的功能)
- Android如何快速集成环信EaseUI(最强修改版)
- Android环信EaseUI的快速集成
- Android 集成环信EaseUI
- ios 快速集成环信EaseUI
- 【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑
- Android使用EaseUI集成环信3.0
- Android集成环信3.0的easeui
- Android 使用集成环信EaseUI
- Android集成环信easeui,设置圆形头像,修改气泡和扩展栏,跳过打包冲突
- studio集成环信EaseUI
- Android环信IM简单集成(EaseUI)
- Android 环信easeui常见问题
- 即时通信(环信) EaseUI 集成视频
- 环信EaseUI集成遇到的问题
- 环信集成EaseUI自定义消息拓展
- Android 使用easeui 3.0 集成环信即时通讯 我踩过的坑
- Android使用EaseUI集成环信3.0 设置头像和用户名 三
- Android环信换新即时聊天集成EaseUI的使用v3.0
- IdHttp.Get 返回字符串中,双引号(")前的汉字返回乱码(�?)
- 浅析 sql server2008
- linux---netstat用法
- spark 2.1 BlockManagerSlaveEndpoint
- mysql5.5 解决中文乱码问题 修改默认编码为utf8
- Android如何快速集成环信EaseUI(最强修改版)
- 架构师之路:一个架构师需要掌握的知识技能
- Python入门实战笔记如何离线安装pymysql
- nginx配置文件解析过程分析
- EditText只改变Hint字体大小
- Oracle语句删除和建立外键约束
- 微信小程序怎么确定是息屏、返回、还是Home键操作?
- ForkJoin框架的一些原理知识点
- Qt/project1/QPushButton/QLineEdit/QPlainTextEdit