您的位置:首页 > 产品设计 > UI/UE

Android 集成 EaseUi

2017-09-26 14:23 253 查看
EaseUi是环信封装了 IM 功能常用的控件、fragment 等等的一个 UI 库。里面已经包含了所需要的库,所以,我们在项目中就不用在导入jar包了,直接引用easeui就行了。


————————-下载demo的请点这—————————

注册登录效果如下:






聊天效果:








[b]*****************************[/b]分割线[b]*********************************************************[/b]



第一步:导入easeUI,首先从官网下载sdk,然后如下图,引用sdk里example里的easeui就行了,



在导入前,需要把easeui里的build.gradle 给删除了,因为android studio 会自动生成一个,如果用自带的可能会报错。




删除后就可以放心的import的啦




第二步:让项目 添加 module 依赖



第三步:初始化

写一个类继承 Application 在里面 初始化 :


public class MyApp extends Application{
@Override
public void onCreate() {
super.onCreate();
//第二个参数也可以填 null,这样就使用它们初始化好的
//EaseUI.getInstance().init(this, null);
EMOptions options = new EMOptions();
//这里我设置的是true 代表 添加好友时不需要验证
options.setAcceptInvitationAlways(true);
EaseUI.getInstance().init(this, options);
}
}


第四步:就是在AndroidManifest.xml 中配置相关信息

在这里,可以根据官方文档添加permission 和 环信 需要的东西。


<!-- 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" />

<!-- 这个是查看大图的activity-->
<activity
android:name="com.hyphenate.easeui.ui.EaseShowBigImageActivity"
android:screenOrientation="portrait"
android:theme="@style/horizontal_slide" />

<!-- 设置环信应用的AppKey -->
<meta-data
android:name="EASEMOB_APPKEY"
android:value="1138161209115045#testeaseui" />
<!-- 声明SDK所需的service SDK核心功能 -->
<service
android:name="com.hyphenate.chat.EMChatService"
android:exported="true" />
<service
android:name="com.hyphenate.chat.EMJobService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
<!-- 声明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>


如果需要地图,就需要在百度地图开发者平台申请密钥,并加上如下代码:


<!-- 查看地图的activity -->
<activity
android:name="com.hyphenate.easeui.ui.EaseBaiduMapActivity"
android:screenOrientation="portrait"
android:theme="@style/horizontal_slide" />

<!--百度地图 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />

<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="Ncrll9O7bzPiginIlacQEY5mtGjrhoZV" />


其他的东西就可以根据官方给出的demo来写了,

需要注意的是

在写好友列表时,我是直接使用的 Easeui里的EaseContactListFragment,需要给Fragment设置好友列表,而且这个方法必须放在子线程中才管用。


new Thread(new Runnable() {
@Override
public void run() {
//这个方法必须放在子线程中
easeContactListFragment.setContactsMap(getContact());
}
}).start();

/**
* 获取联系人
*
* @return
*/
private Map<String, EaseUser> getContact() {
Map<String, EaseUser> map = new HashMap<>();

try {
List<String> userNames = EMClient.getInstance().contactManager().getAllContactsFromServer();
Log.e("aaa", "userNames.size-->:" + userNames.size());
for (String userId : userNames) {
Log.e("aaa", "userId : " + userId);
map.put(userId, new EaseUser(userId));
}
} catch (HyphenateException e) {
e.printStackTrace();
}
return map;
}


还有就是给联系人和会话列表设置监听事件,并在回调方法中处理拿到的数据


//监听会话和好友列表
EMClient.getInstance().chatManager().addMessageListener(msgListener);
EMClient.getInstance().contactManager().setContactListener(emContactListener);

EMMessageListener msgListener = new EMMessageListener() {

@Override
public void onMessageReceived(List<EMMessage> messages) {
Log.e("aaa", "收到消息--》" + messages.toString());
//收到消息
if (conversationListFragment != null) {
conversationListFragment.refresh();
}
EaseUI.getInstance().getNotifier().onNewMesg(messages);
}

@Override
public void onCmdMessageReceived(List<EMMessage> messages) {
//收到透传消息
Log.e("aaa", "收到透传消息");
}

@Override
public void onMessageRead(List<EMMessage> messages) {
//收到已读回执
Log.e("aaa", "收到已读回执");
}

@Override
public void onMessageDelivered(List<EMMessage> message) {
//收到已送达回执
Log.e("aaa", "收到已送达回执");
}

@Override
public void onMessageRecalled(List<EMMessage> messages) {
//消息被撤回
Log.e("aaa", "消息被撤回");
}

@Override
public void onMessageChanged(EMMessage message, Object change) {
//消息状态变动
Log.e("aaa", "消息状态变动");
}
};

EMContactListener emContactListener = new EMContactListener() {
@Override
public void onContactAdded(String s) {
Log.e("aaa", "onContactAdded");

new Thread() {//需要在子线程中调用
@Override
public void run() {
//需要设置联系人列表才能启动fragment
easeContactListFragment.setContactsMap(getContact());
easeContactListFragment.refresh();
}
}.start();

}

@Override
public void onContactDeleted(String s) {
Log.e("aaa", "onContactDeleted");

new Thread() {//需要在子线程中调用
@Override
public void run() {
//需要设置联系人列表才能启动fragment
easeContactListFragment.setContactsMap(getContact());
easeContactListFragment.refresh();
}
}.start();
}

@Override
public void onContactInvited(String s, String s1) {
Log.e("aaa", "onContactInvited");
//收到好友邀请
}

@Override
public void onFriendRequestAccepted(String s) {
Log.e("aaa", "onFriendRequestAccepted");

}

@Override
public void onFriendRequestDeclined(String s) {
Log.e("aaa", "onFriendRequestDeclined");
}
};


还有就是要判断手机6.0的权限 需要的包可以从demo中复制过来

@TargetApi(23)
private void requestPermissions() {
PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this, new PermissionsResultAction() {
@Override
public void onGranted() {
//              Toast.makeText(MainActivity.this, "All permissions have been granted", Toast.LENGTH_SHORT).show();
}

@Override
public void onDenied(String permission) {
//Toast.makeText(MainActivity.this, "Permission " + permission + " has been denied", Toast.LENGTH_SHORT).show();
}
});
}


还有一个小问题

Button setText 时,小写字母变成了大写比如:




只要在button的xml的属性中加上下面的属性就行了

android:textAllCaps="false"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ui EaseUI 聊天