TextToSpeech.synthesizeToFile () на самом деле работает на реальных устройствах, хотя это немного странно.
У меня была та же самая проблема, но в конечном счете заставил это работать. Код, который я использую:
speakTextTxt = speakText.getText().toString();
HashMap<String, String> myHashRender = new HashMap<String, String>();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UTTERANCE_SAVE_ID);
String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
File appTmpPath = new File(exStoragePath + "/sounds/");
appTmpPath.mkdirs();
String tempFilename = "tmpaudio.wav";
tempDestFile = appTmpPath.getAbsolutePath() + "/" + tempFilename;
mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile);
Однако сегодня я нашел кое-что еще довольно странное. Я переключился на другой компьютер для разработки, а затем снова начал получать ту же ошибку "java.io.IOException: Permission denied".
Затем я зашел в Android SDK Manager и убедился, что все «SDK Platform» и «Google APIs от Goole Inc.» пакеты были установлены для всех версий Android. Я не уверен, какая именно версия пакета исправила это, но он снова работает.
Очевидно, у вас может быть прекрасный код, но что-то не так с вашей средой разработки, что может вызвать проблемы.
Я надеюсь, что это может кому-то помочь.