騰訊雲IM新增位置傳送功能
阿新 • • 發佈:2019-01-09
騰訊雲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);
}
}
}
}