Я пытаюсь создать файл с synthesizeToFile:
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";
File fileToGenerate = new File(completePathFile);
String fileName = fileToGenerate.getName();
// this works on Android 6
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
Bundle bundleTts = new Bundle();
bundleTts.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, fileName);
tts.synthesizeToFile
(
textToGenerate
, bundleTts
, fileToGenerate
, fileName
);
}
// this doesn't works on Android 4.1: response is -1
else
{
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);
}
}
}
На устройстве с Android 6 метод synthesizeToFile
работает нормально.
На устройстве с Android 4.1synthesizeToFile
метод возвращает -1
.
Я уже проверил с помощью getEngines (), что установлено "com.google.android.tts".
Как я могу отладить свой скрипт, чтобы выяснить, почемуsynthesizeToFile
возвращает -1
?
Есть альтернативный способ создания этого файла с помощью TTS?
Мне нужно сделать это во внутренней памяти (путь, возвращаемый getFilesDir()
)поэтому я не должен запрашивать разрешение на внешнее хранение.
РЕДАКТИРОВАТЬ:
В logcat я нашел эту ошибку:
E/TextToSpeechService: Can't use /data/data/com.domain.my/files/_12345_test due to exception java.io.IOException: open failed: EACCES (Permission denied)
Я уже пытался:
setWritable(true)
и
setWritable(true, true)
Но даже если оба возвращают true
, исключение все равно возникает.
Итак, как теперь решить эту проблему?