誰かが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開発者では、このメソッドは廃止され、これに置き換えられると述べています:
speak(String text、int queueMode、HashMap params)このメソッドはAPIレベル21で非推奨になりました。APIレベル21の時点で、speak(CharSequence、int、Bundle、String)に置き換えられました。
誰かが私のアプリのコーディングを手伝ってくれますか?.
いろいろなサイトを検索しました。最後に、私はあなたの質問に対する答えを得ることができると思います...
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 and Android 4.4.4.
だから私はこれがトリックだと思う:
_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();
tts.speak(text,TextToSpeech.QUEUE_FLUSH,null,null);
これを試して。
(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);
}
});
ウェイクロック、私はtiをこのように機能させることができました:
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();