首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用API21的TextToSpeech

使用API21的TextToSpeech
EN

Stack Overflow用户
提问于 2015-01-16 00:26:06
回答 6查看 26.6K关注 0票数 22

有没有人能帮我把TTS和API 21一起使用?所有可用的示例在版本21中都已弃用

下面是我的代码,最后一行出现错误:

代码语言:javascript
复制
Calendar cal = Calendar.getInstance();
                    cal.getTime();
                    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
                    String text = sdf.toString();
                    btn.setText("Ouvir as Horas");

                    TextToSpeech tts = new TextToSpeech(NightClock.this,(TextToSpeech.OnInitListener) NightClock.this);
                    tts.setLanguage(Locale.US);
                    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);

在Android开发人员中,它说这个方法已被弃用,取而代之的是:

API (String text,int queueMode,HashMap params)此方法在

级别21中已被弃用。从API级别21开始,替换为speak(CharSequence,int,Bundle,String)。

有人能帮我编写我的应用程序吗。

EN

回答 6

Stack Overflow用户

发布于 2015-04-21 23:55:27

我搜索了很多网站。最后,我想我可以得到你的问题的答案...

不是直接调用tts.speak(),而是使用下面的if-else语句。

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ttsGreater21(text);
} else {
    ttsUnder20(text);
}

然后声明ttsGreater21()和ttsUnder20(),如下所示。

代码语言:javascript
复制
@SuppressWarnings("deprecation")
private void ttsUnder20(String text) {
    HashMap<String, String> map = new HashMap<>();
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, map);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void ttsGreater21(String text) {
    String utteranceId=this.hashCode() + "";
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
}

我用Genymotion VM Android 5.0和Android 4.4.4确认了上面的代码。

票数 44
EN

Stack Overflow用户

发布于 2015-01-17 20:50:34

代码语言:javascript
复制
tts.speak(text,TextToSpeech.QUEUE_FLUSH,null,null);

尝尝这个。

票数 7
EN

Stack Overflow用户

发布于 2015-01-17 22:35:45

所以我猜这就是诀窍:

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    tts.speak("12 e8", TextToSpeech.QUEUE_FLUSH, null, null);
    }
else {
    tts.speak("12 e8", TextToSpeech.QUEUE_FLUSH, null);
    }

我只需要在模拟器上测试一下。

顺便说一句,@Aditya自从你帮了我很大的忙,我一直被困在同一个项目中,它应该会说TextToSpeech并打开屏幕,但我没有设法打开屏幕。我试着从我发现的所有例子中使用唤醒和标志:)这是通过我设法工作的接近传感器来完成的。它会显示文本,但不会显示屏幕。你能在这方面帮我吗?

良好的实践是成功的关键。我建议的所有答案在我的eclipse IDE中都能完美地工作。下面是你屏幕锁定的解决方案

代码语言:javascript
复制
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
 wl.acquire();
   ..screen will stay on during this section..
 wl.release();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27968146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档