1. 程式人生 > >騰訊雲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);
                }

            }
        }

    }