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

时间:2019-07-02 12:52:19

标签: java android exception permissions text-to-speech

我需要使用synthesizeToFile创建一个音频文件。

它可在Android 6(具有synthesizeToFile的重载版本)上运行,但在Android 4.1中,synthesizeToFile返回-1

synthesizeToFile official documentation说:

  

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

然后,要知道是哪个错误导致了-1我在创建此异常的日志猫中进行了搜索:

  

E / TextToSpeechService:由于出现java.io.IOException异常,无法使用/data/data/com.domain.my/files/_12345_test.wav:打开失败: 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来说也是如此?或者对于此版本,我需要这样做吗?)。

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

1 个答案:

答案 0 :(得分:0)

我遇到了您的问题,正在寻找解决方案。 Use of sound files in TTS on Marshmallow (Android 6) fails with permission issues

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

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

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

无论如何,我会在下面的链接中让Google小组了解此问题。他们还没有回应。 https://issuetracker.google.com/issues/152671139

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