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

            }
        }

    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值