我是 Android 的新手,正在写入某个文件。 我想要做的是使用 TextToSpeech.synthesizeToFile() 方法来编写音频文件。这是有效的,但当应用程序退出时,TextToSpeech 引擎会自动删除它创建的文件。所以我然后尝试在另一个目录中复制创建的文件。为此,我使用 org.apache.commons.io.FileUtils 包的 copyFile() 方法。使用此方法只会导致新创建的文件大小为 0。 我正在使用 Environment.getExternalStorageDirectory() 来获取适当的外部存储目录。 我尝试写入现有目录,例如/mnt/sdcard/Ringtones/以及/mnt/sdcard/下新创建的目录...
我检查的另一件事是目标文件上 File.canWrite() 的结果。这实际上返回 false,这可能是一个线索。但是 File.setWritable() 方法似乎并不存在以改变它。
我正在使用如下代码,我没有看到任何异常被抛出
try {
File from = new File(tempDestFile);
File to = new File(permDestFile);
FileUtils.copyFile(from, to);
} catch(IOException e) {
Log.e(T, "Error copying file", e);
} catch(NullPointerException e) {
Log.e(T, "Error copying file", e);
}
关于我可以尝试什么的任何想法? 到目前为止,我发现的任何东西都对我没有太大帮助。
谢谢!我真的很感谢为此类主题提供如此丰富的资源。
最佳答案
啊哈,我终于明白了。当然,这非常有道理。
我试图在调用 [synthesizeToFile()]
[1] 后立即复制文件,因此文件未完成合成/创建。因此 0
字节文件大小。
有效的是[此处][2] 的解释方式。
基本上,只需将唯一 ID 作为可选参数之一发送到 synthesizeToFile()
。
然后,在您的 Activity 中实现 TextToSpeech.OnUtteranceCompletedListener
接口(interface)并覆盖 onUtteranceCompleted()
回调方法。
onUtteranceCompleted()
当然会在语音合成完成时调用。您可以检查之前传入的唯一 ID,以区分您可能正在等待完成的多个话语之间的区别。
我猜是非常标准的东西,但出于某种原因,它回避了我几天。
希望这可以帮助其他可能被卡住的人。
[1]:
关于android - 将文件复制到/从外部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087226/