由于公司特殊需求 , 需要在app接收推送的时候添加一条语音播报的功能 , 所以就有了这篇的踩坑记录
巨大的一个天坑speak failed: not bound to TTS engine 先记录一下
说到语音播报 , 就想起了android自带的TextToSpeech , 经过百度发现 , TextToSpeech这个的使用方法非常简单 , 就需要调用几个简单的方法就可以实现类似于支付宝微信的语音播报功能 .
首先需要 new TextToSpeech对象
new TextToSpeech(Context context, OnInitListener listener);
实现OnInitListener接口
@Override
public void onInit(int status) {
// 初始化成功
if (status == TextToSpeech.SUCCESS){
}else{
// 初始化失败
}
}
启动TextToSpeech开始语音播报
// 语音音调数值越大声音越尖越想女生 , 数值越小声音越沉越想男生
textToSpeech.setPitch(1.0f);
// 语音音速
textToSpeech.setSpeechRate(0.8f);
//开始阅读
//str 阅读的文字
//TextToSpeech.QUEUE_ADD添加到队列后面,依次将前面的读完轮序
//TextToSpeech.QUEUE_FLUSH刷新队列,将之前的队列取消阅读现在的文字
textToSpeech.speak(str,TextToSpeech.QUEUE_ADD,null);
停止TextToSpeech语音播报,释放资源
//不管是不是在阅读,都打断
textToSpeech.stop();
//关闭,释放资源
textToSpeech.shutdown();
textToSpeech = null ;
TextToSpeech的用法就这么简单
前面留下的那个大坑咱们在这解决一下
speak failed: not bound to TTS engine
这个不是报错,只是打印一下普通的日志
但是如果出现这个日志,则无法执行语音播报
经过查找资料发现要解决这个原因的办法是:
在实现OnInitListener接口的方法中进行语音播报功能
@Override
public void onInit(int status) {
textToSpeech.setSpeechRate(speechRate);
textToSpeech.setPitch(pitch);
textToSpeech.speak(str,TextToSpeech.QUEUE_FLUSH,null);
}
这样就可以避免speak failed: not bound to TTS engine这个错误