Android聊天软件开发(基于网易云IM即时通讯)——发送文本消息(四)
16lz
2022-01-27
发送界面
activity_send_message.xml
<?xml version="1.0" encoding="utf-8"?>
SendMessageActivity
package heath.com.chat.message;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;import com.netease.nimlib.sdk.NIMClient;import com.netease.nimlib.sdk.RequestCallback;import com.netease.nimlib.sdk.msg.MessageBuilder;import com.netease.nimlib.sdk.msg.MsgService;import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;import com.netease.nimlib.sdk.msg.model.IMMessage;import heath.com.chat.R;import heath.com.chat.service.IMService;import heath.com.chat.utils.ToastUtil;public class SendMessageActivity extends AppCompatActivity implements View.OnClickListener { private static IMService mImService; private LinearLayout mLlReturn; private EditText mEdSendText; /** * 发消息 */ private Button mBtnSendText; private static TextView mTvReceiveMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_send_message); initView(); init(); } private void init() { // 绑定服务 Intent service = new Intent(SendMessageActivity.this, IMService.class); bindService(service, mMyServiceConnection, BIND_AUTO_CREATE); } @Override public void onDestroy() { super.onDestroy(); // 解绑服务 if (mMyServiceConnection != null) { unbindService(mMyServiceConnection); } } MyServiceConnection mMyServiceConnection = new MyServiceConnection(); private void initView() { mLlReturn = (LinearLayout) findViewById(R.id.ll_return); mEdSendText = (EditText) findViewById(R.id.ed_send_text); mBtnSendText = (Button) findViewById(R.id.btn_send_text); mBtnSendText.setOnClickListener(this); mTvReceiveMessage = (TextView) findViewById(R.id.tv_receive_message); } @Override public void onClick(View v) { switch (v.getId()) { default: break; case R.id.ll_return: finish(); break; case R.id.btn_send_text: final String content = mEdSendText.getText().toString();//消息文本 String account = "1";//目前这里是写死的账号 SessionTypeEnum type = SessionTypeEnum.P2P;//会话类型 final IMMessage textMessage = MessageBuilder.createTextMessage(account, type, content); NIMClient.getService(MsgService.class).sendMessage(textMessage, false).setCallback(new RequestCallback() { @Override public void onSuccess(Void param) { ToastUtil.toastOnUiThread(SendMessageActivity.this,"发送成功"); } @Override public void onFailed(int code) { } @Override public void onException(Throwable exception) { } }); mEdSendText.setText(""); break; } } public static void updateData(String message){ mTvReceiveMessage.setText(message); } class MyServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out .println("--------------onServiceConnected--------------"); IMService.MyBinder binder = (IMService.MyBinder) service; mImService = binder.getService(); } @Override public void onServiceDisconnected(ComponentName name) { System.out .println("--------------onServiceDisconnected--------------"); } }}
接收消息
我这里使用服务来处理消息的接收
IMService
package heath.com.chat.service;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.util.Log;import com.google.gson.Gson;import com.netease.nimlib.sdk.NIMClient;import com.netease.nimlib.sdk.Observer;import com.netease.nimlib.sdk.friend.model.AddFriendNotify;import com.netease.nimlib.sdk.msg.MsgServiceObserve;import com.netease.nimlib.sdk.msg.SystemMessageObserver;import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;import com.netease.nimlib.sdk.msg.constant.SystemMessageType;import com.netease.nimlib.sdk.msg.model.IMMessage;import com.netease.nimlib.sdk.msg.model.SystemMessage;import java.util.List;import heath.com.chat.message.MessageFragment;import heath.com.chat.message.SendMessageActivity;import heath.com.chat.utils.ACache;public class IMService extends Service { private static ACache aCache; private Gson gson; @Override public IBinder onBind(Intent intent) { return new MyBinder(); } public class MyBinder extends Binder { // 返回server的实例 public IMService getService() { return IMService.this; } } @Override public void onCreate() { super.onCreate(); aCache = ACache.get(this); gson = new Gson(); NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, true); NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(incomingMessageObserver, true); } @Override public void onDestroy() { super.onDestroy(); NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, false); NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(incomingMessageObserver, false); } Observer systemMessageObserver = new Observer() { @Override public void onEvent(SystemMessage systemMessage) { if (systemMessage.getType() == SystemMessageType.AddFriend) { AddFriendNotify attachData = (AddFriendNotify) systemMessage.getAttachObject(); if (attachData != null) { // 针对不同的事件做处理 if (attachData.getEvent() == AddFriendNotify.Event.RECV_ADD_FRIEND_DIRECT) { // 对方直接添加你为好友 } else if (attachData.getEvent() == AddFriendNotify.Event.RECV_AGREE_ADD_FRIEND) { // 对方通过了你的好友验证请求 } else if (attachData.getEvent() == AddFriendNotify.Event.RECV_REJECT_ADD_FRIEND) { // 对方拒绝了你的好友验证请求 } else if (attachData.getEvent() == AddFriendNotify.Event.RECV_ADD_FRIEND_VERIFY_REQUEST) { // 对方请求添加好友,一般场景会让用户选择同意或拒绝对方的好友请求。 // 通过message.getContent()获取好友验证请求的附言 } } } } }; private Observer> incomingMessageObserver = new Observer>() { @Override public void onEvent(List messages) { // 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。 for (IMMessage message : messages) { Log.i("message", "onEvent===========: " + message.getContent()); if (message.getMsgType() == MsgTypeEnum.text) { SendMessageActivity.updateData(message.getContent()); } } } };}
使用了服务,记得在AndroidManifest.xml注册一下
记得在LoginActivity里,登录后启动一下
Intent server = new Intent(LoginActivity.this, IMService.class);startService(server);
项目下载地址:https://download.csdn.net/download/qq_32090185/11122479
更多相关文章
- android之访问被保护的资源
- Android动态权限判断以及动态权限申请
- 服务器向Android写一个对象
- Android(安卓)实现一个http 带参数登录
- android上传视频
- Android电子拍卖系统总结四
- Android,HTTP请求中文乱码
- Android结合Retrofit实现统一加解密处理(Get、Post、Delete、Put)
- 【幻灯片分享】凡客移动应用之Android(安卓)+ HTML5技术运用 |