发送界面

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

更多相关文章

  1. android之访问被保护的资源
  2. Android动态权限判断以及动态权限申请
  3. 服务器向Android写一个对象
  4. Android(安卓)实现一个http 带参数登录
  5. android上传视频
  6. Android电子拍卖系统总结四
  7. Android,HTTP请求中文乱码
  8. Android结合Retrofit实现统一加解密处理(Get、Post、Delete、Put)
  9. 【幻灯片分享】凡客移动应用之Android(安卓)+ HTML5技术运用 |

随机推荐

  1. android 根据文件的扩展名选择用什么应用
  2. Android 图像马赛克处理
  3. 判断微信内置浏览器, 其他浏览器
  4. Android中的多媒体显示之图片缩放
  5. Android 开发经验Tips(3)
  6. android 通过反射访问内部类(也可访问其他
  7. Android学习资料【转】
  8. Android setText异常
  9. Fragment Management
  10. Android 文件管理器