diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt index 777a3569dc..5a0d662a84 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.mogo.module.share.constant.ShareConstants +import com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_TROUBLE_HELP import com.mogo.utils.logger.Logger /** @@ -11,11 +12,11 @@ import com.mogo.utils.logger.Logger */ class ShareVoiceCmdReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - // todo 接收唤醒词指令 + // 接收唤醒词指令 val command = intent.getStringExtra("command") Logger.d("ShareCmdReceiver", "收到唤醒词指令: $command") - if (command == "zhunbeishangbao") { - //todo 开启服务,准备上报求助 + if (command == VOICE_CMD_PUB_TROUBLE_HELP) { + // 开启服务,准备上报求助 val seekHelp = Intent(context, VoiceCmdService::class.java) seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) context.startService(seekHelp) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt index c7cd4e464b..ae1c6924c9 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt @@ -42,7 +42,7 @@ class VoiceCmdService:Service() { if (intent.getIntExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY,0) == ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) { // 收到语音指令,准备上报求助 Logger.i(TAG, "收到语音指令,准备上报求助") - SeekHelpManager.seekHelp(this,seekListener,false) + SeekHelpManager.seekHelp(this,seekListener) } } return super.onStartCommand(intent, flags, startId) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 139081e11f..a0134b5feb 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -18,4 +18,6 @@ public class ShareConstants { public static final String VOICE_CMD_SERVICE_EVENT_KEY = "type"; public static final int VOICE_CMD_SERVICE_SEEK_HELP = 1; + + public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving.pubTroubleHelp"; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt index d284b2807c..bcc2b3cd73 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt @@ -37,12 +37,13 @@ object SeekHelpManager { private const val SEEK_RECORD_LIMIT_AMOUNT = 2 const val VOICE_WILL_SEEK_HELP = "将发布故障求助" - private var context:Context? = null - private var aiAssist:AIAssist? = null + private var context: Context? = null + private var aiAssist: AIAssist? = null private val seekRecordList = mutableListOf() private val seekListenerList = mutableListOf() private var isSeekHelp = false + private var isSeeking = false private val voiceCallback = object : IMogoVoiceCmdCallBack { override fun onCmdSelected(cmd: String?) { @@ -77,34 +78,36 @@ object SeekHelpManager { * * @param useLocalVoiceNotice 使用自己的语音播报,如果是从语音助手过来的请求,语音助手可能会走自己的播报,默认是使用自己的播报 */ - fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener,useLocalVoiceNotice:Boolean = true) { - // context初始化 - if (this.context == null) { - this.context = context - aiAssist = AIAssist.getInstance(context) - } - isSeekHelp = ShareControl.getInstance(SeekHelpManager.context).mogoServiceApis.statusManagerApi.isSeekHelping - Logger.d(TAG, "开始故障求助上报---${isSeekHelp}") - seekListenerList.add(seekHelpListener) - when { - isSeekHelp -> { - // 正在求助中,进行异常提示 - toast("已发布故障求助,请耐心等待") - aiAssist?.speakTTSVoice("已发布故障求助,请耐心等待") + fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener, useLocalVoiceNotice: Boolean = true) { + if(!isSeeking) { + isSeeking = true + if (this.context == null) { + this.context = context + aiAssist = AIAssist.getInstance(context) } - getSeekAmountByLimitTime() >= SEEK_RECORD_LIMIT_AMOUNT -> { - // 超过限制时间内的限制次数,进行异常提示 - toast("已在求助状态,请勿连续发布哦") - aiAssist?.speakTTSVoice("已在求助状态,请勿连续发布哦") - } - else -> { - // 没有异常情况,开始故障求助 - if(useLocalVoiceNotice) { - // 语音说完再请求,要不然可能请求的太快 - aiAssist?.speakTTSVoice(VOICE_WILL_SEEK_HELP, voiceCallback) - }else{ - Logger.d(TAG,"不使用本地语音播报,直接开始发起求助") - realSeekHelp() + isSeekHelp = ShareControl.getInstance(SeekHelpManager.context).mogoServiceApis.statusManagerApi.isSeekHelping + Logger.d(TAG, "开始故障求助上报---${isSeekHelp}") + seekListenerList.add(seekHelpListener) + when { + isSeekHelp -> { + // 正在求助中,进行异常提示 + toast("已发布故障求助,请耐心等待") + aiAssist?.speakTTSVoice("已发布故障求助,请耐心等待") + } + getSeekAmountByLimitTime() >= SEEK_RECORD_LIMIT_AMOUNT -> { + // 超过限制时间内的限制次数,进行异常提示 + toast("已在求助状态,请勿连续发布哦") + aiAssist?.speakTTSVoice("已在求助状态,请勿连续发布哦") + } + else -> { + // 没有异常情况,开始故障求助 + if (useLocalVoiceNotice) { + // 语音说完再请求,要不然可能请求的太快 + aiAssist?.speakTTSVoice(VOICE_WILL_SEEK_HELP, voiceCallback) + } else { + Logger.d(TAG, "不使用本地语音播报,直接开始发起求助") + realSeekHelp() + } } } } @@ -144,12 +147,12 @@ object SeekHelpManager { // 请求故障求助接口 val seekRequest = SeekRequest(DeviceUtil.getSn()) val param = mutableMapOf("data" to seekRequest.getJson()) - + ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { override fun onSuccess(o: BaseData?) { super.onSuccess(o) // 接口请求成功,内部同步v2x状态,通知adas,改变自车图标 - ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog",true) + ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", true) isSeekHelp = true aiAssist?.speakTTSVoice("已发布求助信息,将为你通知其他车主") toast("已发布求助信息,将为你通知其他车主") @@ -157,6 +160,7 @@ object SeekHelpManager { seekListenerList.forEach { it.onSeekHelpSuccess() } + isSeeking = false } override fun onError(e: Throwable) { @@ -165,6 +169,7 @@ object SeekHelpManager { Logger.e(TAG, "上报求助失败,网络异常") e.printStackTrace() seekHelpFail() + isSeeking = false } override fun onError(message: String?, code: Int) { @@ -172,6 +177,7 @@ object SeekHelpManager { // 接口请求失败 Logger.e(TAG, "上报求助失败") seekHelpFail() + isSeeking = false } }) } @@ -185,4 +191,30 @@ object SeekHelpManager { aiAssist?.speakTTSVoice("求助上报失败,请稍后重试") } + fun debugCancelSeek() { + val seekRequest = SeekRequest(DeviceUtil.getSn(), 0) + val param = mutableMapOf("data" to seekRequest.getJson()) + ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { + override fun onSuccess(o: BaseData?) { + super.onSuccess(o) + // 接口请求成功,内部同步v2x状态,通知adas,改变自车图标 + ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", false) + isSeekHelp = false + } + + override fun onError(e: Throwable) { + super.onError(e) + // 接口请求失败 + Logger.e(TAG, "上报求助失败,网络异常") + e.printStackTrace() + } + + override fun onError(message: String?, code: Int) { + super.onError(message, code) + // 接口请求失败 + Logger.e(TAG, "上报求助失败") + } + }) + } + } \ No newline at end of file