33 | * 程序入口,做一些必要的初始化操作
34 | */
35 | public class App extends VMApp {
36 |
37 | private CallReceiver callReceiver;
38 |
39 | @Override
40 | public void onCreate() {
41 | super.onCreate();
42 |
43 | VMTools.init(context);
44 | // 初始化环信sdk
45 | initHyphenate();
46 | }
47 |
48 | /**
49 | * 初始化环信sdk,并做一些注册监听的操作
50 | */
51 | private void initHyphenate() {
52 | // 获取当前进程 id 并取得进程名
53 | int pid = android.os.Process.myPid();
54 | String processAppName = getAppName(pid);
55 | /**
56 | * 如果app启用了远程的service,此application:onCreate会被调用2次
57 | * 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
58 | * 默认的app会在以包名为默认的process name下运行,如果查到的process name不是app的process name就立即返回
59 | */
60 | if (processAppName == null || !processAppName.equalsIgnoreCase(context.getPackageName())) {
61 | // 则此application的onCreate 是被service 调用的,直接返回
62 | return;
63 | }
64 |
65 | // 初始化sdk的一些配置
66 | EMOptions options = new EMOptions();
67 | // options.enableDNSConfig(false);
68 | // options.setIMServer("im1.easemob.cm");
69 | // options.setImPort(443);
70 | // options.setRestServer("a1.easemob.com:80");
71 | // options.setAppKey("easemob-demo#chatdemoui");
72 | // options.setAppKey("easemob-demo#chatuidemo");
73 | // options.setAppKey("hx-ps#api4vip6");
74 | // options.setAppKey("cx-dev#cxstudy");
75 |
76 | options.setAutoLogin(true);
77 | // 设置小米推送 appID 和 appKey
78 | // options.setMipushConfig("2882303761517573806", "5981757315806");
79 |
80 | // 设置消息是否按照服务器时间排序
81 | options.setSortMessageByServerTime(false);
82 |
83 | // 初始化环信SDK,一定要先调用init()
84 | EMClient.getInstance().init(context, options);
85 |
86 | // 开启 debug 模式
87 | EMClient.getInstance().setDebugMode(true);
88 |
89 | // 设置通话广播监听器
90 | IntentFilter callFilter = new IntentFilter(EMClient.getInstance()
91 | .callManager()
92 | .getIncomingCallBroadcastAction());
93 | if (callReceiver == null) {
94 | callReceiver = new CallReceiver();
95 | }
96 | //注册通话广播接收者
97 | context.registerReceiver(callReceiver, callFilter);
98 |
99 | CallManager.getInstance().setExternalInputData(false);
100 | // 通话管理类的初始化
101 | CallManager.getInstance().init(context);
102 |
103 | setConnectionListener();
104 |
105 | setConferenceListener();
106 |
107 | setMessageListener();
108 | }
109 |
110 | /**
111 | * 设置连接监听
112 | */
113 | private void setConnectionListener() {
114 | EMConnectionListener connectionListener = new EMConnectionListener() {
115 | @Override
116 | public void onConnected() {
117 |
118 | }
119 |
120 | @Override
121 | public void onDisconnected(int i) {
122 | String str = "" + i;
123 | switch (i) {
124 | case EMError.USER_REMOVED:
125 | str = "账户被移除";
126 | break;
127 | case EMError.USER_LOGIN_ANOTHER_DEVICE:
128 | str = "其他设备登录";
129 | break;
130 | case EMError.USER_KICKED_BY_OTHER_DEVICE:
131 | str = "其他设备强制下线";
132 | break;
133 | case EMError.USER_KICKED_BY_CHANGE_PASSWORD:
134 | str = "密码修改";
135 | break;
136 | case EMError.SERVER_SERVICE_RESTRICTED:
137 | str = "被后台限制";
138 | break;
139 | }
140 | VMLog.i("onDisconnected %s", str);
141 | }
142 | };
143 | EMClient.getInstance().addConnectionListener(connectionListener);
144 | }
145 |
146 | /**
147 | * 设置多人会议监听
148 | */
149 | private void setConferenceListener() {
150 | EMClient.getInstance()
151 | .conferenceManager()
152 | .addConferenceListener(new EMConferenceListener() {
153 | @Override
154 | public void onMemberJoined(String username) {
155 | VMLog.i("Joined username: %s", username);
156 | }
157 |
158 | @Override
159 | public void onMemberExited(String username) {
160 | VMLog.i("Exited username: %s", username);
161 | }
162 |
163 | @Override
164 | public void onStreamAdded(EMConferenceStream stream) {
165 | VMLog.i("Stream added streamId: %s, streamName: %s, memberName: %s, username: %s, extension: %s, videoOff: %b, mute: %b", stream
166 | .getStreamId(), stream.getStreamName(), stream.getMemberName(), stream.getUsername(), stream
167 | .getExtension(), stream.isVideoOff(), stream.isAudioOff());
168 | VMLog.i("Conference stream subscribable: %d, subscribed: %d", EMClient.getInstance()
169 | .conferenceManager()
170 | .getAvailableStreamMap()
171 | .size(), EMClient.getInstance()
172 | .conferenceManager()
173 | .getSubscribedStreamMap()
174 | .size());
175 | }
176 |
177 | @Override
178 | public void onStreamRemoved(EMConferenceStream stream) {
179 | VMLog.i("Stream removed streamId: %s, streamName: %s, memberName: %s, username: %s, extension: %s, videoOff: %b, mute: %b", stream
180 | .getStreamId(), stream.getStreamName(), stream.getMemberName(), stream.getUsername(), stream
181 | .getExtension(), stream.isVideoOff(), stream.isAudioOff());
182 | VMLog.i("Conference stream subscribable: %d, subscribed: %d", EMClient.getInstance()
183 | .conferenceManager()
184 | .getAvailableStreamMap()
185 | .size(), EMClient.getInstance()
186 | .conferenceManager()
187 | .getSubscribedStreamMap()
188 | .size());
189 | }
190 |
191 | @Override
192 | public void onStreamUpdate(EMConferenceStream stream) {
193 | VMLog.i("Stream added streamId: %s, streamName: %s, memberName: %s, username: %s, extension: %s, videoOff: %b, mute: %b", stream
194 | .getStreamId(), stream.getStreamName(), stream.getMemberName(), stream.getUsername(), stream
195 | .getExtension(), stream.isVideoOff(), stream.isAudioOff());
196 | VMLog.i("Conference stream subscribable: %d, subscribed: %d", EMClient.getInstance()
197 | .conferenceManager()
198 | .getAvailableStreamMap()
199 | .size(), EMClient.getInstance()
200 | .conferenceManager()
201 | .getSubscribedStreamMap()
202 | .size());
203 | }
204 |
205 | @Override
206 | public void onPassiveLeave(int error, String message) {
207 | VMLog.i("passive leave code: %d, message: %s", error, message);
208 | }
209 |
210 | @Override
211 | public void onConferenceState(ConferenceState state) {
212 | VMLog.i("State " + state);
213 | }
214 |
215 | @Override
216 | public void onStreamStatistics(EMStreamStatistics emStreamStatistics) {
217 | VMLog.i(emStreamStatistics.toString());
218 | }
219 |
220 | @Override
221 | public void onStreamSetup(String streamId) {
222 | VMLog.i("Stream id %s", streamId);
223 | }
224 |
225 | @Override
226 | public void onSpeakers(List