首先,如果想省事的话一定要使用官方的easeui,会省很多事。那么问题就来了,应该怎么做呢?
记着,如果使用easeui的话,不要直接在项目中导入jar包或者引用依赖,因为会出现各种问题。如果不使用easeui就无所谓了。直接import moudle,easeui。然后会出现不能导入moudle的问题,这个在我上一篇博客说了解决方法。导入之后按shift+alt+ctrl+s进入project structrue界面。如下图。
然后点击dependencies,右上角会出现加号,点击之后选择第三个,moudle dependency,选择刚添加的moudle。
接着点击完成就集成完毕。
接下来进入easeui中的build.gradle。将implementation全部改成api,因为3.0之后的implementation是项目私有的,不能让其他moudle使用。然后就万事大吉了。
进入自己的moudle,创建一个application,集成application,在里面写上使用环信需要的初始化方法。
public class HuanApplication extends Application { private Context context; @Override public void onCreate() { super.onCreate(); context = this; EMOptions options = new EMOptions(); // 默认添加好友时,是不需要验证的,改成需要验证 options.setAcceptInvitationAlways(false); // 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载 options.setAutoTransferMessageAttachments(true); // 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联 options.setAutoDownloadThumbnail(true); //初始化 EMClient.getInstance().init(context, options); //在做打包混淆时,关闭debug模式,避免消耗不必要的资源 EMClient.getInstance().setDebugMode(true); EaseUI.getInstance().init(context, options); } private static Toast toast; /** * [简化Toast] */ @SuppressLint("ShowToast") public static void setShortToast(Context context, String msg) { Looper.prepare(); if (toast == null) { toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT); } else{ toast.setText(msg); } toast.show(); Looper.loop(); } }
在AndroidManifest中添加需要使用的权限。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Your Package" android:versionCode="100" android:versionName="1.0.0"> <!-- 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" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="Your Application"> <!-- 设置环信应用的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> </application> </manifest>
然后在activity中就可以调用了。通过官方api中的方法先建立一个账号密码,创建id。在里面先自己添加一个账户,然后调用环信的登录方法试验一下。成功的话后面就好做了。
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText name; private EditText pass; private Button login; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; initView(); //HuanApplication huanApplication = new HuanApplication(); //String pid = huanApplication.getAppName(1); } private void initView() { name = (EditText) findViewById(R.id.name); pass = (EditText) findViewById(R.id.pass); login = (Button) findViewById(R.id.login); login.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.login: if ("".equals(name.getText().toString().trim()) || "".equals(pass.getText().toString().trim())) { Toast.makeText(this, "请填写完整信息", Toast.LENGTH_SHORT).show(); } else { login(name.getText().toString().trim(), pass.getText().toString().trim()); } break; } } /** * * */ private void login(String userName, String password) { Log.e("TAG", "login: " + userName + " " + password); EMClient.getInstance().login(userName, password, new EMCallBack() {//回调 @Override public void onSuccess() { startActivity(new Intent(context,HomeActivity.class)); EMClient.getInstance().groupManager().loadAllGroups(); EMClient.getInstance().chatManager().loadAllConversations(); Log.e("zhujiang", "登录聊天服务器成功!"); setShortToast(context,"登录聊天服务器成功!"); } @Override public void onProgress(int progress, String status) { } @Override public void onError(int code, String message) { Log.e("zhujiang", "登录聊天服务器失败!"); setShortToast(context,"登录聊天服务器失败!"); } }); } }
下面是上面activity的布局。很简单,只是为了测试使用。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:layout_margin="10dp" android:textColor="#333333" android:text="账号登录" android:layout_gravity="center_horizontal"/> <EditText android:id="@+id/name" android:layout_width="match_parent" android:inputType="number" android:layout_height="wrap_content" android:hint="请输入账号"/> <EditText android:id="@+id/pass" android:layout_width="match_parent" android:inputType="number" android:layout_height="wrap_content" android:hint="请输入密码"/> <Button android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="登录"/> </LinearLayout>
OK,你也可以试着调用一下easeui的控件,先调用一个最简单的EaseTitleBar。在布局中先添加上。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:hyphenate="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <com.hyphenate.easeui.widget.EaseTitleBar android:id="@+id/title_bar" android:layout_width="match_parent" android:layout_height="wrap_content" hyphenate:titleBarLeftImage="@drawable/ease_mm_title_back" /> </LinearLayout>
然后在activity中设置下。
public class HomeActivity extends AppCompatActivity { private EaseTitleBar title_bar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initView(); } private void initView() { title_bar = (EaseTitleBar) findViewById(R.id.title_bar); title_bar.setTitle("朱江"); title_bar.setRightImageResource(R.drawable.ease_mm_title_remove); } }
下面是布局显示出来的样子。