有人可以帮我使用带有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开发人员中,它表示不推荐使用此方法,并将其替换为:
说(String text,int queueMode,HashMap params) 此方法在API级别21中已弃用。从API级别21开始,替换为speak(CharSequence,int,Bundle,String)。
有人可以帮我编写应用程序代码。
答案 0 :(得分:41)
我搜索了各种网站。最后,我想我能得到你问题的答案......
直接调用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确认了上述代码。
答案 1 :(得分:5)
tts.speak(text,TextToSpeech.QUEUE_FLUSH,null,null);
试试这个。
答案 2 :(得分:5)
所以我猜这就是诀窍:
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。屏幕锁定的解决方案在
之下 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();
答案 3 :(得分:2)
(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);
}
}
答案 4 :(得分:0)
试试这个
tts=new TextToSpeech(getBaseContext(),new TextToSpeech.OnInitListener()
{
@Override
public void onInit(int status)
{
tts.setLanguage(Locale.getDefault());
tts.setPitch(1.3f);
tts.setSpeechRate(1f);
}
});
答案 5 :(得分:0)
唤醒锁,我设法以这种方式工作:
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();