假設我們想要快速實現1個即時通訊功能,最快捷的方法就是借助網絡上的即時云服務。下面我們講述1下如何利用環信實現1個IM功能。
首先下載環信的SDK,也就是幾個庫,把demo里面的HXSDKHelper.java,HXSDKModel.java,DefaultHXSDKModel.java,HXPreferenceUtils.java4個文件復制到新建的工程下。稍作修改。
首先在Application中實現初始化SDK
public static DemoHXSDKHelper hxSDKHelper = new DemoHXSDKHelper();
@Override
public void onCreate() {
super.onCreate();
applicationContext = this;
instance = this;
hxSDKHelper.onInit(applicationContext);
}
然后在Activity中登陸
EMChatManager.getInstance().login("123456", "123456", new EMCallBack() {
@Override
public void onSuccess() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(context, "登陸成功!", Toast.LENGTH_LONG).show();
}
});
};
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(final int code, final String message) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "登陸失敗" + message, Toast.LENGTH_SHORT).show();
}
});
}
});
調用函數進行信息的發送
String string = editText3.getText().toString();
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
String toNum = editText.getText().toString();
if (toNum.equals("1425193776689")) {
message.setChatType(ChatType.GroupChat);
}
TextMessageBody txtBody = new TextMessageBody(string);
message.addBody(txtBody);
message.setReceipt(toNum);
try {
EMChatManager.getInstance().sendMessage(message);
} catch (EaseMobException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在接收信息時,只需要監聽廣播就能夠
// 注冊接收消息廣播
receiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(5);
registerReceiver(receiver, intentFilter);
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 記得把廣播給終結掉
abortBroadcast();
String username = intent.getStringExtra("from");
String msgId = intent.getStringExtra("msgid");
// 收到這個廣播的時候,message已在db和內存里了,可以通過id獲得mesage對象
final EMMessage message = EMChatManager.getInstance().getMessage(msgId);
final TextMessageBody txtBody = (TextMessageBody)message.getBody();
Toast.makeText(getApplicationContext(), "text message from:" + message.getFrom() + " text:" + txtBody.getMessage() + "
", Toast.LENGTH_LONG).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
editText2.setText("from:" + message.getFrom() + "
text:" + txtBody.getMessage() + "
");
}
});
}
}
這樣就能夠進行收發。
由于環信的庫比較大,編譯完以后可履行文件有5M那末大。