Android 集成 EaseUi

来源:互联网 发布:ar9271 linux驱动 编辑:程序博客网 时间:2024/05/20 11:49
  EaseUi是环信封装了 IM 功能常用的控件、fragment 等等的一个 UI 库。里面已经包含了所需要的库,所以,我们在项目中就不用在导入jar包了,直接引用easeui就行了。 

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

  注册登录效果如下:      

这里写图片描述 这里写图片描述

  聊天效果:

这里写图片描述 这里写图片描述

*****************************分割线*********************************************************

第一步:导入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"
原创粉丝点击