1.在使用环信判断是否与服务器连接以及之前是否登陆时:
一直出现空指针异常
//获取是否和服务器链接的状态
布尔连接= EMClient。getInstance().isConnected();
//之前是否登陆过
布尔值 loggedInBefore = EMClient。getInstance().isLoggedInBefore();
后来才知道到底是为什么:原因是在清单文件中(
manifest
)少写了一句
android :name = “.utlis.MyApplication”这句话的作用是什么: 这个名字属性是用来设置所有的Activity是属于那个Application的,默认是android.app.Application当然也可以自定义一个类: public class MyApplication extends Application { } ,将我们以前一直使用默认的应用程序设置成我们自定义的应用程序,应用程序的作用就是为了放一些全局的和一些上下文都要用到的变量和方法之类的。
环信的配置工作流程:1.下载环信SDK2.libs.without.audio文件夹下的文件以及的.jar拷贝到项目的库目录下(库目录下无实时语音, 实时 音频功能的SDK包,如果项目中只用到聊天功能,可以采用此文件夹下的内容)。3.在build.gradle文件夹下导入(sourceSets {main {jniLibs.srcDirs = ['libs']}})。4.在清单文件中加入以下权限,以及写上你注册的的AppKey。{
< 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.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 = “XXXXXXXXXXXXXXXXXXXXXXXXX” /> <! - 声明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 >
}
5.初始化SDK,要求在应用的的onCreate()方法中进行初始化(此时你需要自定义一个类继承自应用,重写的OnCreate()方法)
公共类 MyApplication扩展应用程序{@覆盖
public void onCreate(){super .onCreate();//初始化环信的SDK
initHX();}
私人无效 initHX(){EMOptions options = new EMOptions();//默认添加好友时,是不需要验证的,改成需要验证
options.setAcceptInvitationAlways(false);//初始化
EMClient。getInstance().init(this,options);//在做打包混淆时,关闭调试模式,避免消耗不必要的资源
EMClient。getInstance().setDebugMode(true);}
}
6.在清单文件中 应用程序节点下修改android :name = “.utlis.MyApplication” (该应用程序为你自定义的应用程序)