讯飞语音识别RecognizerDialog自定义view

集成语音识别的过程中,语音识别的那个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.net/tangyayong/article/details/78925045

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用自定义View可以让你在Android应用中创建具有自定义外观和交互行为的组件。以下是使用自定义View的基本步骤: 1. 创建一个继承自View或其子类的Java类,作为自定义View的实现。 例如,你可以创建一个名为CustomView的类:`public class CustomView extends View` 2. 在自定义View的构造函数中进行初始化和设置。 在构造函数中,你可以设置画笔、颜色、形状、属性等。你还可以处理触摸事件、测量和布局等。 例如,你可以在构造函数中初始化画笔:`Paint paint = new Paint();` 3. 重写onDraw()方法,在该方法中实现自定义View的绘制逻辑。 在onDraw()方法中,你可以使用Canvas对象绘制图形、文本等元素。通过调用invalidate()方法,可以触发View的重新绘制。 例如,你可以在onDraw()方法中使用画笔绘制一个圆:`canvas.drawCircle(x, y, radius, paint);` 4. 根据需要重写其他的方法,处理触摸事件、测量和布局等。 例如,你可以重写onTouchEvent()方法来处理触摸事件,并根据手势改变自定义View的状态。 5. 在XML布局文件或代码中使用自定义View。 如果你希望在XML布局文件中使用自定义View,可以在XML文件中添加相应的标签,并指定自定义View的包名和类名。 例如,你可以在XML布局中添加一个CustomView:`<com.example.app.CustomView android:layout_width="match_parent" android:layout_height="match_parent"/>` 以上是使用自定义View的基本步骤。当你使用自定义View时,可以根据自己的需求定制其外观和行为,并根据需要处理相关事件。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值