1

私はAndroidにかなり慣れておらず、特定のファイルに書き込みを行っています。私がやろうとしているのは、TextToSpeech.synthesizeToFile()メソッドを使用してオーディオファイルを書き込むことです。これは、アプリが終了すると、作成したファイルをTextToSpeechエンジンが自動的に削除するという事実を除いて機能しています。そこで、作成したファイルのコピーを別のディレクトリに作成しようとしました。これを行うには、org.apache.commons.io.FileUtilsパッケージのcopyFile()メソッドを使用します。この方法を使用すると、サイズが0の新しく作成されたファイルのみが生成されます。Environment.getExternalStorageDirectory()を使用して、適切な外部ストレージディレクトリを取得しています。/ mnt / sdcard / Ringtones /などの既存のディレクトリと、/ mnt /sdcard/の下に新しく作成されたディレクトリに書き込んでみました...

私がチェックしたもう1つのことは、宛先ファイルの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);
}

私が何をしようとするかについてのアイデアはありますか?私がこれまでに見つけたものは、これに関して私を大いに助けてくれませんでした。

ありがとう!このようなトピックに関するすばらしいリソースに本当に感謝しています。

4

2 に答える 2

2

ああ、ついに手に入れた。そしてもちろん、それは完全に理にかなっています。

[1]を呼び出した直後にファイルをコピーしようとした[synthesizeToFile()]ので、ファイルの合成/作成が完了していませんでした。したがって、0バイトファイルサイズ。

うまくいくのは、それが[ここ][2]で説明されている方法です。基本的にsynthesizeToFile()は、オプションのパラメータの1つとして一意のIDをに送信するだけです。次に、アクティビティにインターフェイスを実装し、コールバックメソッドTextToSpeech.OnUtteranceCompletedListenerをオーバーライドします。onUtteranceCompleted()

onUtteranceCompleted()もちろん、発話の合成が終了すると呼び出されます。以前に渡した一意のIDを確認して、終了を待っている可能性のある複数の発話の違いを確認できます。

かなり標準的なものだと思いますが、何らかの理由で数日間私を回避しました。

うまくいけば、これは立ち往生している可能性のある他の誰かを助けることができます。

[1]:

http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#synthesizeToFile%28java.lang.String,%20java.util.HashMap%3Cjava.lang.String,%20java.lang.String% 3E、%20java.lang.String%29
[2]:

http://developer.android.com/resources/articles/tts.html

于 2011-11-17T01:01:44.663 に答える
0

この古い学校の方法を試しましたか?

FileInputStream fis = new FileInputStream(tempDestFile);
FileOutputStream fos = new FileOutputStream(permDestFile);
byte[] bites= new byte[1024];
int count = fis.read(bites);
while (  count != -1){
    fos.write(bites, 0, count);
    count = fis.read(bites);            
}

マニフェストにWRITE_EXTERNAL_STORAGE権限があることを確認してください。

于 2011-11-11T02:54:32.830 に答える