Intereting Posts

TextToSpeech с API 21

Может ли кто-нибудь помочь мне использовать TTS с API 21. Все доступные примеры устарели с версией 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, вместо него используется слово (CharSequence, int, Bundle, String).

Может кто-то помочь, чтобы закодировать мое приложение.

Solutions Collecting From Web of "TextToSpeech с API 21"

Я искал различные сайты. Наконец, я думаю, что смогу получить ответ на ваш вопрос …

Вместо прямого вызова 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); } 

Мне просто нужно проверить это на эмуляторе.

Кстати, @Aditya, так как вы были так полезны, я застрял в том же проекте, где должен говорить, что TextToSpeech и включает экран, но мне не удается включить экран. Я попытался использовать wakelocks и флаги из всех примеров, которые я нашел 🙂 Это делается через датчик приближения, который мне удалось сработать. Он говорит текст, но не показывает экран. Можете ли вы мне помочь?

Хорошая практика – ключ к успеху. Все предложенные мной ответы отлично работают в моей 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();

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