Мне нужно создать аудиофайл с помощью synthesizeToFile .
. Он работает на Android 6 (с перегруженной версией synthesizeToFile ), но на Android 4.1 * 1007.* возвращает -1
.
Официальная документация synthesizeToFile
гласит:
Синтезирует данный текст в файл с использованием указанных параметров.Этот метод является асинхронным, то есть метод просто добавляет запрос в очередь запросов TTS, а затем возвращает .
Затем, чтобы узнать, какая ошибка вызвала поиск -1
.в logcat, где я нашел это исключение:
E / TextToSpeechService: не могу использовать /data/data/com.domain.my/files/_12345_test.wav из-за исключения java.io.IOException: открыть не удалось: EACCES (В доступе отказано)
Существует какая-то другая конфигурация / настройка системы между Android 6 и 4.1, которая вызывает эту ошибку?
Я долженпередать synthesizeToFile
путь, отличный от пути, возвращаемого getFilesDir()
?
Я должен установить права доступа к файлу?
Код, который я использовал для Android 4.1:
TextToSpeech tts = new TextToSpeech(getApplicationContext(), this, "com.google.android.tts");
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
String textToGenerate = "this is a test";
// /data/data/com.domain.my/files is returned by getFilesDir()
String completePathFile = "/data/data/com.domain.my/files/_12345_test.wav";
File fileToGenerate = new File(completePathFile);
String fileName = fileToGenerate.getName();
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, fileName);
int response = tts.synthesizeToFile
(
textToGenerate
, hashMap
, completePathFile
);
Log.d("testTTS", "Generation file " + fileName + " - response = " + response);
}
}
Я уже проверил с помощью getEngines (), что установлено com.google.android.tts.
Мне нужно сохранить файл во внутреннем хранилище, поэтому я не должен запрашивать разрешение на внешнее хранение (это правдатакже для Android 4.1? или для этой версии e мне нужно сделать so?).
Если я намеренно передам synthesizeToFile
путь, который не существует, ошибка в logcat изменится на file not found exception
, так что метод правильно проверит, что путь completePathFile
существует.