腾讯云IM自定义位置发送
集成腾讯云IM时,Demo里面发现没有位置这个功能,看了官方文档支持发送位置信息及自定义消息,于是简单的实现了发送位置消息的大概思路。基于官方3.XDemo基础上进行的修改
1、自定义位置消息对象
2、ChatInput中添加样式及添加点击事件调用ChatView发送位置方法
3、ChatView添加发送位置接口方法
4、ChatActivity继承ChatView实现发送位置方法
5、ChatActivity实现位置显示
自定义位置消息对象
import android.content.Context;
import android.util.TypedValue;
import android.widget.TextView;
import com.journey.tencentimlib.R;
import com.journey.tencentimlib.TIMApplication;
import com.journey.tencentimlib.adapters.ChatAdapter;
import com.tencent.imsdk.TIMLocationElem;
import com.tencent.imsdk.TIMMessage;
/**
* Created by Administrator on 2018/7/31 0031.
*/
public class LocationMessage extends Message {
public LocationMessage(TIMMessage message) {
this.message = message;
}
public LocationMessage(double la, double lg, String addr) {
message = new TIMMessage();
TIMLocationElem elem = new TIMLocationElem();
elem.setLatitude(la); //设置纬度
elem.setLongitude(lg); //设置经度
elem.setDesc(addr);
message.addElement(elem);
}
@Override
public void showMessage(ChatAdapter.ViewHolder viewHolder, Context context) {
clearView(viewHolder);
if (checkRevoke(viewHolder)) return;
TIMLocationElem e = (TIMLocationElem) message.getElement(0);
TextView tv = new TextView(TIMApplication.getContext());
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
tv.setTextColor(TIMApplication.getContext().getResources().getColor(isSelf() ? R.color.white : R.color.black));
tv.setText(e.getDesc() + " " + e.getLatitude() + "," + e.getLongitude());
getBubbleView(viewHolder).addView(tv);
showStatus(viewHolder);
}
@Override
public String getSummary() {
String str = getRevokeSummary();
if (str != null) return str;
return TIMApplication.getContext().getString(R.string.summary_location);
}
@Override
public void save() {
}
}
ChatInput中添加样式及添加点击事件调用ChatView发送位置方法 代码片段
LinearLayout btnLocation = (LinearLayout) findViewById(R.id.btn_location);
btnLocation.setOnClickListener(this);
if (id == R.id.btn_location) {
if (activity != null && requestLocation(activity)) {
chatView.sendLocation();
}
}
private boolean requestLocation(Activity activity) {
if (afterM()) {
int hasPermission = activity.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
if (hasPermission != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_CODE_ASK_PERMISSIONS);
return false;
}
}
return true;
}
ChatView添加发送位置接口方法
/**
* 发送位置
*/
void sendLocation();
ChatActivity继承ChatView实现发送位置方法
public class ChatActivity extends FragmentActivity implements ChatView {
/**
* 发送位置
*/
@Override
public void sendLocation() {
Message message = new LocationMessage(113.93, 22.54, "我的位置");
presenter.sendMessage(message.getMessage());
}
ChatActivity实现位置显示
此处是官方的重写方法
/**
* 显示消息
*
* @param message
*/
@Override
public void showMessage(TIMMessage message) {
if (message == null) {
adapter.notifyDataSetChanged();
} else {
Message mMessage = MessageFactory.getMessage(message);
if (mMessage != null) {
if (mMessage instanceof CustomMessage) {
CustomMessage.Type messageType = ((CustomMessage) mMessage).getType();
switch (messageType) {
case TYPING:
TemplateTitle title = (TemplateTitle) findViewById(R.id.chat_title);
title.setTitleText(getString(R.string.chat_typing));
handler.removeCallbacks(resetTitle);
handler.postDelayed(resetTitle, 3000);
break;
default:
break;
}
} else {
if (messageList.size() == 0) {
mMessage.setHasTime(null);
} else {
mMessage.setHasTime(messageList.get(messageList.size() - 1).getMessage());
}
messageList.add(mMessage);
adapter.notifyDataSetChanged();
listView.setSelection(adapter.getCount() - 1);
}
}
}
}