【问题标题】:UtteranceProgressListener (TTS) not working or not being called (Android 4.4.2)UtteranceProgressListener (TTS) 不工作或未被调用 (Android 4.4.2)
【发布时间】:2014-09-25 19:58:11
【问题描述】:

两天以来,我一直在尝试让 UtteranceProgressListener 工作。我一直在尝试来自 Stackoverflow 和其他一些网站的大量代码 - 对我没有任何帮助。这是我当前的代码:

这是我激活文字转语音的方法。它在 onCreate 中被调用。

private void activateTTS() {
    tts=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                int result=tts.setLanguage(Locale.getDefault());
                if (result==TextToSpeech.LANG_MISSING_DATA ||
                        result==TextToSpeech.LANG_NOT_SUPPORTED) {
                }
                tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                    @Override 
                    public void onDone(String utteranceId) {
                        if (utteranceId == "myId") {
                            //[...] all my code that is not being called
                            //when speaking is finished
                        }
                    } 

                    @Override 
                    public void onError(String utteranceId) {
                    } 

                    @Override 
                    public void onStart(String utteranceId) {
                    } 
                });
            }
        }
    });
}

我知道需要带有 utteranceId 的 HashMap 来识别话语。这是我的代码(只是方法的一部分):

params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "myId");
tts.speak(myString, TextToSpeech.QUEUE_FLUSH, params);

我的重要变量(对于 tts 和 HashMap)是:

private static TextToSpeech tts;
private HashMap<String, String> params;

任何代码都是我的类“TTSPlayer”的一部分,它扩展了 MainActivity 但没有实现任何东西:

public class TTSPlayer extends MainActivity {
//[all my code]
}

编辑:这是我的 manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.saschaha.readit"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:name="com.saschaha.readit.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.saschaha.readit.TTSPlayer"
        android:label="@string/ReadIt" >
    </activity>
</application>
</manifest>

tts 工作正常(文本正在说话)但 UtteranceProgressListener 不起作用(我的代码没有被调用)。我不知道为什么。有什么帮助吗? 非常感谢!!

【问题讨论】:

    标签: java android listener text-to-speech


    【解决方案1】:

    错误在于字符串比较

    if (utteranceId == "myId")  
    

    改成

    if ("myId".equals(utteranceId))
    

    【讨论】:

    • 谢谢,但这也不起作用。现在我将我的代码设置为可运行的,这对我有用(因为我想进行一些 UI 更改)。但是现在出现了一个新问题:旋转屏幕后,UI的变化不再生效。我想,我会重写我的整个班级,也许让它发挥作用。感谢您的帮助!
    • @saschaha ,是的,正如您所说的 UI 更改。这里奇怪而重要的事情是它不会触发任何错误。只是中断方法工作并返回。
    猜你喜欢
    • 2013-12-16
    • 2014-03-17
    • 2018-06-23
    • 2011-06-06
    • 2017-11-23
    • 2014-06-11
    • 2017-11-28
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多