admin管理员组文章数量:1562464
集成语音识别的过程中,语音识别的那个RecognizerDialog下面有 “语音识别能力由讯飞输入法提供”看着很别扭, 想去掉或者完全使用自定义的View,研究了一波。
RecognizerDialog自定义view需要先看官方直接提供demo里的部分代码,选择是否显示对话框。
if (isShowDialog) {
// 显示听写对话框
mIatDialog.setListener(mRecognizerDialogListener);
mIatDialog.show();
showTip(getString(R.string.text_begin));
} else {
// 不显示听写对话框
ret = mIat.startListening(mRecognizerListener);
if (ret != ErrorCode.SUCCESS) {
showTip("听写失败,错误码:" + ret);
} else {
showTip(getString(R.string.text_begin));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
1.isShowDialog为true
当isShowDialog为true时是直接使用官方的RecognizerDialog,但是我又不想看到对话框下边那一行字,研究许久,发现可以修改UI,获取字体所在的控件,设置为”“,隐藏字体,也可改写成自己想要的字体效果,重写字体的点击事件
隐藏字体:
mIatDialog.setListener(mRecognizerDialogListener);
mIatDialog.show();
showTip(getString(R.string.text_begin));
//获取字体所在的控件,设置为"",隐藏字体,
TextView txt = (TextView)mIatDialog.getWindow().getDecorView().findViewWithTag("textlink");
txt.setText("");
- 1
- 2
- 3
- 4
- 5
- 6
- 7
重写修改字体效果:
mIatDialog.setListener(mRecognizerDialogListener);
mIatDialog.show();
showTip(getString(R.string.text_begin));
// 也可改写成自己想要的字体效果,重写字体的点击事件
TextView txt = (TextView)mIatDialog.getWindow().getDecorView().findViewWithTag("textlink");
txt.setText("xxxxxxxxxx");
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//点击后想做的事件
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2.isShowDialog为false
当isShowDialog为false时,完全抛开官方RecognizerDialog,自定义dialog,在听写监听器RecognizerListener中处理显示或隐藏自定义dialog逻辑。
/**
* 听写监听器。
*/
private RecognizerListener mRecognizerListener = new RecognizerListener() {
@Override
public void onBeginOfSpeech() {
// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
showTip("开始说话");
//显示自定义的dialog
}
@Override
public void onError(SpeechError error) {
//隐藏自定义dialog
// Tips:
// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
// 如果使用本地功能(语记)需要提示用户开启语记的录音权限。
if(mTranslateEnable && error.getErrorCode() == 14002) {
showTip( error.getPlainDescription(true)+"\n请确认是否已开通翻译功能" );
} else {
showTip(error.getPlainDescription(true));
}
}
@Override
public void onEndOfSpeech() {
//隐藏自定义dialog
// 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
showTip("结束说话");
}
@Override
public void onResult(RecognizerResult results, boolean isLast) {
Log.d(TAG, results.getResultString());
if( mTranslateEnable ){
printTransResult( results );
}else{
printResult(results);
}
if (isLast) {
// TODO 最后的结果
}
}
@Override
public void onVolumeChanged(int volume, byte[] data) {
showTip("当前正在说话,音量大小:" + volume);
Log.d(TAG, "返回音频数据:"+data.length);
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
// 若使用本地能力,会话id为null
// if (SpeechEvent.EVENT_SESSION_ID == eventType) {
// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
// Log.d(TAG, "session id =" + sid);
// }
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
值得一提的是,onVolumeChanged方法中会一直回调声音音量的大小,有业务需求的可以在这个方法里处理自己的逻辑。
@Override
public void onVolumeChanged(int volume, byte[] data) {
showTip("当前正在说话,音量大小:" + volume);
Log.d(TAG, "返回音频数据:"+data.length);
}
- 1
- 2
- 3
- 4
- 5
- 6
转自:https://blog.csdn/tangyayong/article/details/78925045
本文标签: 飞语自定义RecognizerDialogView
版权声明:本文标题:讯飞语音识别RecognizerDialog自定义view 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727479733a1116676.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论