Far*_*n M 3 android text-to-speech android-emulator android-studio
我需要在 Android 模拟器中更改一些设置吗?该应用程序在 Android 设备中运行,但不在模拟器中运行。当我按下转换按钮时,它根本不输出任何语音。我什至检查其他应用程序是否通过扬声器提供输出。是的,youtube 运行得很好。
package com.example.labpgm7;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
EditText texttospeak;
Button speak;
TextToSpeech t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
texttospeak=findViewById(R.id.texttospeech);
t=new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status)
{
}
});
}
public void speak(View v)
{
String text=texttospeak.getText().toString();
t.setPitch(1.0f);
t.setSpeechRate(1.0f);
t.speak(text,TextToSpeech.QUEUE_FLUSH,null);
}
}
Run Code Online (Sandbox Code Playgroud)
TTS 在模拟器上不起作用的原因是TextToSpeech
实例创建应该异步执行,而不是在主 UI 线程中执行。
onInit()
事实上,您必须通过等待回调验证状态是否为 来确保 TTS 初始化成功TextToSpeech.SUCCESS
。还应该定义语言,例如(仅使用 AsyncTask 进行演示):
private class TTSInit extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
t=new TextToSpeech(getContext(), status -> {
if (status == TextToSpeech.SUCCESS) {
t.setLanguage(Locale.ENGLISH);
/* now you can invoke speak() */
}
});
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,如果您的目标是 Android 11,则应将以下代码添加到清单中:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3137 次 |
最近记录: |