在 getFilesDir() 返回的路径中写入的权限被拒绝



我需要用合成文件创建一个音频文件。

它适用于Android 6(使用合成到文件的重载版本),但在Android 4.1中synthesizeToFile返回-1

synthesizeToFile官方文件说:

使用指定的参数将给定的文本合成到文件中。此方法是异步的,即该方法只是将请求添加到 TTS 请求队列中,然后返回

然后,为了知道哪个错误导致了该-1我在建立此异常的日志中搜索:

E/TextToSpeechService:由于异常,无法使用/data/data/com.domain.my/files/_12345_test.wav java.io.IOException:打开失败:EACCES(权限被拒绝)

Android 6和4.1之间有一些不同的系统配置/设置导致此错误?

我必须通过与getFilesDir()返回的路径不同的路径synthesizeToFile

我必须设置文件权限吗?

我用于安卓 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也是如此?或者对于这个版本,我需要这样做?

如果我故意传递给synthesizeToFile不存在的路径,logcat 中的错误将更改为file not found exception,以便该方法正确检查路径completePathFile是否存在。

我遇到了您的问题,正在寻找解决问题的方法。 在棉花糖 (Android 6) 上的 TTS 中使用声音文件失败并出现权限问题

对我来说,它是TTS中的addspeech()。

我认为 TTS 上的权限问题来自这样一个事实,即设备中的 TTS 是一个单独的应用程序,并且 TTS 应用程序无权写入或读取应用程序的外部或内部存储中的文件。

有趣的是,我在应用程序代码中调用 TTS 实例并使用其所有功能,但它们无法访问我的应用程序的存储。TTS 不是我的应用程序,因此我无法代表 TTS 请求权限。我认为这是谷歌必须处理的一种错误。

无论如何,我在下面的链接中让谷歌团队知道了这个问题。不过他们还没有回应。 https://issuetracker.google.com/issues/152671139

您可以在上面的链接中支持我,或者您可以发布自己的问题,让他们知道有多个开发人员希望 TTS 权限问题得到解决。

相关内容

  • 没有找到相关文章

最新更新