TextToSpeech与API 21

有人可以帮助我在API 21中使用TTS。所有可用的示例都在版本21中被弃用

这是我的代码给最后一行错误:

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开发者中,它说这个方法已被弃用,并被这个replace:

speak(String text,int queueMode,HashMap params)此方法在API级别21中已弃用。从API level 21开始,由speak(CharSequence,int,Bundle,String)取代。

有人可以帮助编写我的应用程序。

Solutions Collecting From Web of "TextToSpeech与API 21"

我search了各种网站。 最后,我想我可以得到你的问题的答案…

直接调用tts.speak(),把下面的if-else语句。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ttsGreater21(text); } else { ttsUnder20(text); } 

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

 @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确认了上面的代码。

 tts.speak(text,TextToSpeech.QUEUE_FLUSH,null,null); 

尝试这个。

所以我想这是诀窍:

 if (Build.VERSION.RELEASE.startsWith("5")) { tts.speak("12 e8", TextToSpeech.QUEUE_FLUSH, null, null); } else { tts.speak("12 e8", TextToSpeech.QUEUE_FLUSH, null); } 

我只需要在模拟器上进行testing。

顺便说一句,@Aditya,因为你一直很有帮助,我一直被困在同一个项目,它应该说TextToSpeech并打开屏幕,但我没有设法打开屏幕。 我已经尝试使用我发现的所有示例中的唤醒锁和标记:)这是通过我设法使用的接近传感器完成的。 它说的文字,但不显示屏幕。 你能帮我吗?

好的做法是成功的关键。 我所有的build议答案在我的Eclipse IDE中完美的工作。 您的屏幕locking解决scheme如下

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();

(1)我的活动实现TextToSpeech.OnInitListener

(2)我在onInit方法中演奏了我的合成语音,但是我想(没试过)可以在onInit()被调用后随时播放。 但是这是关键,你必须等待TextToSpeech引擎初始化。

 public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener { public TextToSpeech mTTS; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTTS = new TextToSpeech(this, this); } @Override public void onInit(int i) { mTTS.setLanguage(Locale.UK); mTTS.speak("Hello, how are you?", TextToSpeech.QUEUE_ADD, null, null); } } 

尝试这个

 tts=new TextToSpeech(getBaseContext(),new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { tts.setLanguage(Locale.getDefault()); tts.setPitch(1.3f); tts.setSpeechRate(1f); } }); 

唤醒锁,我设法使这样工作:

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "MyWakelock"); wl.aquire(); wl.release();