增加了语音控制

This commit is contained in:
董宏宇
2020-10-22 17:08:05 +08:00
parent 398f7ea307
commit 2a95f81fea
6 changed files with 175 additions and 32 deletions

View File

@@ -7,13 +7,18 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.module.common.entity.MarkerExploreWay;
import com.mogo.module.common.entity.V2XEventShowEntity;
import com.mogo.module.common.entity.V2XRoadEventEntity;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.scenario.scene.fatigue.V2XFatigueDrivingScenario;
import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.v2x.scenario.scene.ugc.V2XEventUgcScenario;
import com.mogo.module.v2x.utils.EventTypeUtils;
import com.mogo.module.v2x.utils.V2XUtils;
import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
import com.mogo.module.v2x.voice.V2XVoiceConstants;
import com.mogo.module.v2x.voice.V2XVoiceManager;
/**
* e-mail : 1358506549@qq.com
@@ -26,6 +31,12 @@ import com.mogo.module.v2x.utils.V2XUtils;
*/
public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
// 语音控制反馈 YES
private V2XVoiceCallbackListener mFeedBackYes = (command, intent) -> manualMarkingTrafficJam();
// 语音控制反馈 NO
private V2XVoiceCallbackListener mFeedBackNo = (command, intent) -> manualMarkingTrafficJam();
private ImageView ivEventTypeIcon;
private TextView tvEventUgcTitle;
private ImageView ivEventReportTrue;
@@ -36,6 +47,13 @@ public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
private V2XRoadEventEntity mV2XRoadEventEntity;
private V2XEventShowEntity mV2XEventShowEntity;
// 要反馈的道路事件信息
private String eventId = "122";//要反馈的道路事件ID
private int status = 1;//状态1--有用0--没用
private String helpId = "11221";//本车弹窗的时候分享的事件ID如果没用后台应做删除操作
public V2XEventUgcVH(ViewGroup viewGroup) {
super(LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_v2x_event_ugc, viewGroup, false));
@@ -43,6 +61,32 @@ public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
tvEventUgcTitle = itemView.findViewById(R.id.tvEventUgcTitle);
ivEventReportTrue = itemView.findViewById(R.id.ivEventReportTrue);
ivEventReportErr = itemView.findViewById(R.id.ivEventReportErr);
// 设置视图状态监听
itemView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
//Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewAttachedToWindow");
}
@Override
public void onViewDetachedFromWindow(View v) {
//Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewDetachedFromWindow");
// 反注册语音交互
V2XVoiceManager.INSTANCE
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP);
}
});
}
@Override
@@ -65,7 +109,15 @@ public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
if (ugcTitleStr != null) {
tvEventUgcTitle.setText(((String) ugcTitleStr[0]).replace("####", mNoveltyInfo.getAddr()));
AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice((String) ugcTitleStr[1], null);
AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice((String) ugcTitleStr[1], new IMogoVoiceCmdCallBack() {
@Override
public void onSpeakEnd(String speakText) {
// 注册语音交互
V2XVoiceManager.INSTANCE
.registerUnWakeVoice((String) ugcTitleStr[3], mFeedBackYes)
.registerUnWakeVoice((String) ugcTitleStr[4], mFeedBackNo);
}
});
ivEventTypeIcon.setImageResource((Integer) ugcTitleStr[2]);
}
@@ -73,13 +125,13 @@ public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
ivEventReportTrue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
manualMarkingTrafficJam();
}
});
ivEventReportErr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
manualMarkingTrafficJam();
}
});
}
@@ -89,12 +141,26 @@ public class V2XEventUgcVH extends V2XBaseViewHolder<V2XEventShowEntity> {
}
}
/**
* 对道路事件进行反馈
*/
void manualMarkingTrafficJam() {
AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("已反馈", null);
V2XServiceManager
.getV2XRefreshModel()
.manualMarkingTrafficJam(
eventId,
status,
helpId);
delayedCloseWindow();
}
/**
* 延迟关闭窗体
*/
@Override
public void delayedCloseWindow() {
itemView.postDelayed(() -> V2XFatigueDrivingScenario.getInstance().close(), 1000);
itemView.postDelayed(() -> V2XEventUgcScenario.getInstance().close(), 1000);
}
}

View File

@@ -154,8 +154,11 @@ public interface V2XApiService {
@FormUrlEncoded
@POST("/deva/poiInfoFabulous/car/poi/no/RespondingToHelp/v1")
Observable<BaseData> respondingToHelp(@FieldMap Map<String, Object> params);
/**
* 响应求助
* 道路事件UGC
* 需求地址
* http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=42321443
*/
@FormUrlEncoded
@POST("/deva/car/poi/no/manualMarkingTrafficJam")

View File

@@ -584,4 +584,42 @@ public class V2XRefreshModel {
});
}
}
/**
* 道路事件UGC
* 需求地址
* http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=42321443
* {"id":"","status":1,"markUser":"name","sn":"111111","helpId":"222"}
*/
public void manualMarkingTrafficJam(String id,
int status,
String helpId) {
if (mV2XApiService != null) {
final Map<String, Object> map = new ParamsProvider.Builder(mContext).build();
String json = new StringBuilder()
.append("{")
.append("\"id\":").append(id)
.append(",")
.append("\"sn\":").append(Utils.getSn())
.append(",")
.append("\"status\":").append(status)
.append(",")
.append("\"helpId\":").append(helpId)
.append("}").toString();
map.put("data", json);
mV2XApiService.manualMarkingTrafficJam(map).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<BaseData>(RequestOptions.create(mContext)) {
@Override
public void onSuccess(BaseData o) {
super.onSuccess(o);
}
@Override
public void onError(String message, int code) {
super.onError(message, code);
}
});
}
}
}

View File

@@ -7,6 +7,7 @@ import android.util.Log
/**
* ugc上报反馈
* http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=42321443
*/
class UgcUploadStatusReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {

View File

@@ -2,6 +2,7 @@ package com.mogo.module.v2x.utils;
import com.mogo.module.common.entity.V2XPoiTypeEnum;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.voice.V2XVoiceConstants;
/**
* @ProjectName: MoGoModulSafeDriving
@@ -140,31 +141,39 @@ public class EventTypeUtils {
* @return UGC 文案
*/
public static Object[] getUgcTitleStr(String poiType) {
Object[] str = new Object[3];
Object[] str = new Object[5];
switch (poiType) {
// 封路
case V2XPoiTypeEnum.ROAD_CLOSED:
str[0] = "你刚经过 #### 封路吗?";
str[0] = "你刚经过 #### \n封路吗?";
str[1] = "你刚路过的路段封路吗?您可以直接对我说封路、或者不封路。";
str[2] = R.drawable.v_to_x_event_ugc_fenglu;
str[3] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP;
str[4] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP;
break;
// 施工
case V2XPoiTypeEnum.FOURS_ROAD_WORK:
str[0] = "你刚经过 #### 有道路施工吗?";
str[0] = "你刚经过 #### \n有道路施工吗?";
str[1] = "你刚路过的路段道路施工吗?您可以直接对我说有施工、或者没有施工。";
str[2] = R.drawable.v_to_x_event_ugc_shigong;
str[3] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP;
str[4] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP;
break;
// 拥堵
case V2XPoiTypeEnum.FOURS_BLOCK_UP:
str[0] = "你刚路过 #### 堵不堵?";
str[0] = "你刚路过 #### \n堵不堵?";
str[1] = "你刚路过的路段堵不堵?您可以直接对我说拥赌、或者不堵。";
str[2] = R.drawable.v_to_x_event_ugc_yongdu;
str[3] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP;
str[4] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP;
break;
// 事故
case V2XPoiTypeEnum.FOURS_ACCIDENT:
str[0] = "你刚经过 #### 有事故发生吗?";
str[0] = "你刚经过 #### \n有事故发生吗?";
str[1] = "你刚路过的路段有交通事故吗?您可以直接对我说有事故、或者没有事故。";
str[2] = R.drawable.v_to_x_event_ugc_shigu;
str[3] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP;
str[4] = V2XVoiceConstants.COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP;
break;
default:
return null;

View File

@@ -1,8 +1,6 @@
package com.mogo.module.v2x.voice;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -22,10 +20,6 @@ public class V2XVoiceConstants {
* 免唤醒
*/
public static final Map<String, String[]> sVoiceCmds = new HashMap<>();
/**
* 唤醒
*/
public static final List<String> sCmds = new ArrayList<>();
/**
* 查看前方实况
*/
@@ -225,12 +219,48 @@ public class V2XVoiceConstants {
public static final String COMMAND_ZHIDAO_V2X_OPEN_SHEAR_EVENT_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_OPEN_SHEAR_EVENT_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_OPEN_SHEAR_EVENT_UN_WAKEUP_WORDS = {"我的分享"};
/*
* 查看车辆信息
* */
/**
* 查看车辆信息
*/
public static final String COMMAND_ZHIDAO_V2X_OPEN_CAR_INFO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_OPEN_CAR_INFO_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_OPEN_CAR_INFO_UN_WAKEUP_UN_WAKEUP_WORDS = {"查看车辆信息"};
/**
* 用户UGC反馈免唤醒词语
*/
// 拥堵
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP_WORDS = {"拥堵", "很堵", "堵死了", "有点堵", "确定"};
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP_WORDS = {"没注意", "不堵", "很畅通", "取消", "关闭"};
// 封路
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP_WORDS = {"封路了", "封了", "有封路", "确定"};
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP_WORDS = {"没注意", "没看到", "没有", "没封路", "取消", "关闭"};
// 事故
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP_WORDS = {"有事故", "存在交通事故", "确定"};
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP_WORDS = {"没注意", "没有事故", "没看到", "没有", "取消", "关闭"};
// 道路施工
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP_WORDS = {"", "在施工", "有施工", "确定"};
public static final String COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP_WORDS = {"没注意", "没看到", "没有施工", "很正常", "取消", "关闭"};
static {
// 免唤醒 默认
sVoiceCmds.put(COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP, COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP_WORDS);
@@ -259,17 +289,13 @@ public class V2XVoiceConstants {
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_OPEN_SHEAR_EVENT_UN_WAKEUP, COMMAND_ZHIDAO_V2X_OPEN_SHEAR_EVENT_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_OPEN_CAR_INFO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_OPEN_CAR_INFO_UN_WAKEUP_UN_WAKEUP_WORDS);
//默认
/* sCmds.add(COMMAND_ZHIDAO_V2X_CALL_CHATTING);
sCmds.add(COMMAND_ZHIDAO_V2X_NAVI);*/
/* sCmds.add(COMMAND_ZHIDAO_V2X_NEXT);
sCmds.add(COMMAND_ZHIDAO_V2X_LIVE_ROAD);
sCmds.add(COMMAND_ZHIDAO_V2X_REPORT);
sCmds.add(COMMAND_ZHIDAO_V2X_ZAN);
sCmds.add(COMMAND_ZHIDAO_V2X_SEEK_HELP);
sCmds.add(COMMAND_ZHIDAO_V2X_CANCEL_HELP);
sCmds.add(COMMAND_ZHIDAO_V2X_CLOSE_WINDOW);*/
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_YES_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_YONG_DU_NO_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_YES_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_FENG_LU_NO_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_YES_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP_WORDS);
}
}