UtteranceProgressListener 不会调用函数

2024-03-21

我正在尝试制作一个语音驱动的应用程序,但是我遇到了一个主要问题。

My UtteranceProgressListener无论我将 Speak 方法放在哪里,类都不会调用任何给定的方法。

这是我的代码:

这是我的 OnCreate 方法:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = this;
    voiceBtn = (Button) findViewById(R.id.startListeningBtn);

    voiceBtn.setEnabled(false);
    textToSpeech = new TextToSpeech(mContext,new botListener());

  }    

这是 OnInit 侦听器实现

public class botListener implements TextToSpeech.OnInitListener{
    @Override
    public void onInit(int i) {

        if(i == TextToSpeech.SUCCESS)
        {
            int s = textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
            @Override
            public void onStart(String s) {
                Toast.makeText(getApplicationContext(),"Done Speaking",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onDone(String s) {
                Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(String s) {
                Toast.makeText(getApplicationContext(),"Done Speaking",Toast.LENGTH_SHORT).show();
            }
        });
        Log.d(TAG,String.valueOf(s));

            int result = textToSpeech.setLanguage(Locale.ENGLISH);

            if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
                Log.e(TAG,"Language not supported");
                Intent installLanguage = new Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installLanguage);
            }
            Log.d(TAG,"Started Voice Speaker");
        }
        else{
            Log.e(TAG,"initialization failed");
        }
    }
}

现在,当我按下按钮时,触发的事件是:

public void initVoiceRecog(View v){
    //Toast.makeText(mContext,"Clicked",Toast.LENGTH_SHORT).show();
    Speak("hello","1");
    // does some other things here after that 

}

private void Speak(String text,String identifierID){

    if(Build.VERSION.SDK_INT>21) {
        Bundle params = new Bundle();
        params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,identifierID);
        textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params, identifierID);
    }
    else{
    // ttsMap is a HashMap
    ttsMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,identifierID);
    textToSpeech.speak(text,TextToSpeech.QUEUE_FLUSH,ttsMap );
    }
}

我的问题是,打招呼后,它不会触发OnStart() or the OnError() or the OnDone()方法。为什么会发生这种情况?

我尝试过使用已弃用的setOnUtteranceListner()同样的结果。它不会触发任何方法,Toast 不会出现。

请告知此问题的修复或解决方法。

我尝试过的设备有:

  • API 19 Micromax 帆布硝基
  • API 21 三星 S4
  • API 23(Marshmellow) 华硕 Zenfone

  • 我终于弄清楚为什么回调不起作用。事实证明,他们正在单独的线程上工作和调用。因此,要执行正常功能,请调用“Activity.this.RunOnUiThread”中的函数并将其放入回调函数中。

    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    UtteranceProgressListener 不会调用函数 的相关文章

    随机推荐

    • 如何禁用从互联网到 Jelastic 节点的入口?

      默认情况下 在 Jelastic 中创建的每个资源都会获得一个 dns 条目 并且可以通过互联网进行访问 对于许多服务 例如数据库 我不希望出现这种行为 这是默认行为 这似乎很不安全 我只想从我的环境中的其他服务或通过 ssh 访问这些内容
    • 使用.net正则表达式平衡匹配捕获内部项目

      我找到了有关 net 正则表达式平衡匹配的以下资源 http weblogs asp net whaggard archive 2005 02 20 377025 aspx http weblogs asp net whaggard arc
    • Prometheus 为每个 pod 的多个指标端点抓取配置

      我们有一个 Kubernetes Pod 它提供多个指标端点 3093 metrics and 9113 metrics 但它还有一个不提供任何指标的端口 80 TL DR 是否可以只刮掉端口3093 and 9113 我们正在使用示例配置
    • WPF ListViewItem 颜色不正确

      我设置了一个非常基本的测试来解决我在使用 Visual Studio 2012 并在 Windows 8 1 上运行的针对 NET Framework 4 的 WPF 中遇到的颜色问题 问题在于 IsSelected 和 IsMouseOv
    • Eclipse与tomcat——eclipse修改server.xml

      我在 使用 tomcat 安装 模式下将 tomcat 与 eclipse 结合使用 我的问题是 eclipse 每次都会覆盖 tomcats server xml 并删除我的 crossContext true 元素 我应该使用自定义位置
    • 如何在 VB 6 中检查对象的类型? - 我不想使用“TypeOf”方法

      如何在 VB 6 0 中检查对象的类型 我们必须修改现有代码以使用 typeof 方法 是否有任何方法 例如将光标移动到对象变量上或像快速监视那样可以看到其类型 我知道以下方法 但我不想使用它 Set fs New Scripting Fi
    • 向 MultiIndex DataFrame 添加一个空行

      正如标题所暗示的 我想在我的MultiIndex DataFrame 第一级索引需要有一个定义的索引值 第二级索引需要是np nan 列中的值需要是np nan 考虑以下 import pandas as pd import numpy a
    • PyUsb USB 条码扫描器

      我正在尝试在 Ubuntu 中使用 Honeywell USB 3310g 扫描仪从条形码或 qrcode 输出字符串 我有 libusb 和一个名为 Metro usb 的库 http gitorious org other metro
    • Scheme/Racket有枚举操作吗?

      Scheme Racket 是否有相当于 Haskell 中的 a b 表示法的枚举表示法 在 Haskell 中 1 5 计算结果为列表 1 2 3 4 5 for list i in range 1 6 i sequence gt li
    • Spark流式批量查找数据

      我需要从 HDFS 上的文件查找 Spark 流作业中的一些数据 该数据由批处理作业每天获取一次 有没有 设计模式 为了这样的任务 如何在执行后立即重新加载内存中的数据 哈希图 每日更新 当查找数据时 如何连续服务流作业被抓取 一种可能的方
    • 电子如何创建增量文件

      I use electron builder构建我的应用程序并成功构建第一个版本 其中包含三个输出 foosetup exe foo 0 0 1 full nupkg 和 RELEASES 现在我想实现自动更新 并且我已经部署了后端服务通过
    • Scala 中语法糖的所有实例是什么?

      Scala 中语法糖的所有实例是什么 它们很难搜索 因为大多数 全部都是纯粹的符号 因此在不知道概念名称的情况下很难搜索 TODO 隐式转换 匿名函数的语法 其他我忘记的事情 Basics a b相当于a b a b c相当于a b c 除
    • 如何在 PHP / XAMPP 中启用 cURL

      如何在 PHP 中启用 cURL On Debian http en wikipedia org wiki Debian with Apache http en wikipedia org wiki Apache HTTP Server 2
    • 使用按钮在 Chart.js 中切换图表

      我是一名初学者开发人员 我一直在尝试使用 ChartJS 将一些数据显示到屏幕上 我希望能够单击一个按钮来生成另一组新的数据 轴 我一直在尝试遵循其他堆栈溢出答案 但似乎没有一个对我有用 请参见下文
    • 在 R 中操作变量以生成新数据集

      我是一个相对较新的 R 用户 如果对我的数据集有任何帮助 我真的很感激 我有一个包含 2400 万行的数据集 数据集中有 3 个变量 患者姓名 药房名称以及该次就诊时从药房领取的药物数量 有些患者多次出现在数据集中 即他们在不同时间点从不同
    • 如何在 dart/Flutter 中使用 Firebase 快照字典上的 SplayTreeMap?

      我已成功通过 StreamBuilder 取回数据并需要对其进行排序 如何按键对快照数据的映射进行排序 另外 如果你给出一个这样做的例子 我的价值也会有所帮助 我想我想做一个 SplayTreeMap 但如果有更好的方法请提供 这是我的字典
    • Knife Bootstrap 的 Chef 节点配置问题 - 无法通过服务器进行身份验证

      我正在尝试使用 Knife Bootstrap 设置厨师客户端节点 knife bootstrap nodename x user P passwd sudo 收到以下错误消息 Chef 在尝试创建客户端 nodename url com
    • JAXB - 如何序列化集合子类中的字段

      我在序列化我的类 ArrayList 的子类 中的字段时遇到问题 添加到列表中的项目已序列化 但字段未序列化 XmlRootElement public static class NumberedList extends ArrayList
    • 以编程方式将 SurfaceView 添加到在 ImageView 下按 Z 顺序排列的 FrameLayout

      编辑2a 随意跳到底部询问简洁的问题 I can 通过xml绘制SurfaceView https stackoverflow com questions 5203547 draw surfaceview from layout xml 就
    • UtteranceProgressListener 不会调用函数

      我正在尝试制作一个语音驱动的应用程序 但是我遇到了一个主要问题 My UtteranceProgressListener无论我将 Speak 方法放在哪里 类都不会调用任何给定的方法 这是我的代码 这是我的 OnCreate 方法 prot