This commit is contained in:
wangcongtao
2020-04-16 17:19:27 +08:00
4 changed files with 70 additions and 35 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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";
}

View File

@@ -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<SeekRecord>()
private val seekListenerList = mutableListOf<ISeekHelpListener>()
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<BaseData>(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<BaseData>(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, "上报求助失败")
}
})
}
}