番外篇:
1.在做界面时,总遇到输入键盘不能自己收起,导致需要手动收起键盘,使操作多一步,现在说一下我的流程,
检查键盘是否显示,代码如下:
private Context mContext;
private View view;
public InPutMethodManag(Context mContext,View view) {
super();
this.mContext = mContext;
this.view = view;
}
/**
* 查看输入键盘状态
* @return false 输入法 关闭 否则打开
* */
public boolean IsOpen(){
InputMethodManager imm =
(InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
return imm.isActive();
}
/**
* 关闭弹出的输入法
* */
public void closeInput(){
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
2.再次遇到这个问题,用Dialog时,Context出现问题,我在Adapter里调用dialog.show() 报错,因为我给Adapter传送的上下文用的是getApplicationContext()换成.this;就可以了,以后但凡用到Context时,我决定用.this。以防再遇到这问题,但是记得之前看过一个关于Context的文章,结果给忘了。。。。
言归正传:
前一篇文章完成查找好友与界面显示问题,这篇文章主要完成用户点击“添加”按钮后客户端与服务器的交互问题,属于后端处理。我认为流程图如下:
先介绍第1步,A向服务器发送添加B请求,我按BMOB官方资料处理,
首先 获取用户B的objectId —— 用户的唯一标示符
private void getTargetUserInstallId(String objectId,FindListener<BmobChatUser> findcallback) {
BmobQuery<BmobChatUser> query = new BmobQuery<BmobChatUser>();
query.addWhereEqualTo("objectId", objectId);
query.findObjects(globalContext, findcallback);
}
然后 确定用户B存在后,将“tag 消息类型” 用户信息 封装成JSON
public static BmobMsg createTagSendMsg(Context context,String tag, String targetId,BmobChatUser currentUser){
BmobChatUser user = BmobUserManager.getInstance(context).getCurrentUser();
BmobMsg msg = new BmobMsg(tag, targetId,user.getObjectId(), user.getUsername(), user.getAvatar(), user.getNick(),
String.valueOf(BmobUtils.getTimeStamp()),
BmobConfig.INVITE_ADD_NO_VALIDATION);
return msg;
}
最后 将封装的JSON数据 根据设备类型推送消息到指定平台 (根据BMOB官方)
private void send(BmobChatUser user, JSONObject json,PushListener pushCallback) {
String installationId = user.getInstallId();
String deviceType = user.getDeviceType();
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
if (deviceType != null && deviceType.equals("ios")) {
query.addWhereEqualTo("deviceToken", installationId);
} else {
query.addWhereEqualTo("installationId", installationId);
}
bmobPush.setQuery(query);
bmobPush.pushMessage(json, pushCallback);
}
至此完成了第1步,用户A向服务器发送添加B请求。
接下来完成服务器向B发送推送消息,介绍第二步:
BmobIM内部集成了BmobPush服务的,所以需要在官网管理后台的消息推送->推送设置->应用包名中填写应用的正确包名。