腾讯云IM添加位置发送功能

腾讯云IM添加位置发送功能

腾讯云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);

}

}

}

}

相关数据

冲印照片的方式有哪些?哪种方式性价比最高?
365bet官网首页

冲印照片的方式有哪些?哪种方式性价比最高?

⌛ 07-02 👁️ 9855
返利继续爆火,常见的返利方式有哪几种?
beat365在线登录app

返利继续爆火,常见的返利方式有哪几种?

⌛ 06-30 👁️ 3830
去泰国用什么地图
beat365在线登录app

去泰国用什么地图

⌛ 06-28 👁️ 2367