2011-11-10 12 views
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); 
} 

任意のアイデアをスローされる例外を見ていませんか? これまでに私が見つけたことは、これについて私を助けたことはありませんでした。

ありがとうございます!私は本当にこのようなトピックのための素晴らしいリソースを感謝します。

+0

問題は、新しいファイルへの書き込みではなくTextToSpeech.synthesizeToFileで作成したファイルからの読み込みからではないようです()。私はこのファイルから正しく読み込むことができません。手動でもプログラムでもコピーできません。おかしいです。誰もTextToSpeech.synthesizeToFile()を正常に使用しましたか? – Trees

答えて

2

私はついにそれを手に入れました。もちろん、それは完璧な意味があります。

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

どのように動作するかは、[ここ] [2]で説明されている方法です。 基本的には、オプションのパラメータの1つとして一意のIDをsynthesizeToFile()に送信するだけです。 次に、アクティビティに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

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の権限がマニフェストに含まれていることを確認してください。

+0

レスポンスriotopsysありがとう。私はマニフェストでWRITE_EXTERNAL_STORAGE権限を持っています。私はバイトを読み書きする古い方法を試しましたが、空の出力先ファイルであるFileUtils.copyFile()メソッドを使用したときと同じ結果になります。 – Trees

+0

[getExternalFilesDir](http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String))を使用してストレージディレクトリを取得しようとしましたか? – riotopsys

関連する問題