2015-09-25 17 views
6

私のアプリは、電話/タブレットをコンピュータに接続すると、システムファイルエクスプローラでファイルを見ることができる場所にファイルを保存する必要があります。Androidの外部パブリックストレージにファイルを書き込んで、Windowsから見えるようにするにはどうすればいいですか?

これは私がファイルの書き込みを実装方法である:

protected String mDir = Environment.DIRECTORY_DOCUMENTS; 
protected File mPath = Environment.getExternalStoragePublicDirectory(mDir); 

protected void writeLogFile(String filename) { 
    File f = new File(mPath, filename + ".txt"); 
    f.getParentFile().mkdirs(); 
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(f, false))) { 

     // Details omitted. 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return; 
    } 
    makeText("Wrote " + f.getAbsolutePath()); 
} 

これは、私は、Windows(予告行方不明の文書フォルダ)に私のソニーのXperia Z4タブレットを接続したときに、私が見たものである。

windows file explorer showing tablet contents

これは、ファイルが書き込まれるディレクトリです(上の実装を使用して):

android device monitor showing file system

私の実装で何が問題になっていますか?

答えて

11

私の実装で何が問題になっていますか?

MediaStoreまだ新しく作成されたファイルが見つかりませんでした。 —と多くの端末上の「ギャラリー」アプリ—に表示されている内容は、MediaStoreのインデックスに基づいています。

使用MediaScannerConnectionとそのscanFile()方法あなたがディスクにデータを書き出した後、あなたのファイルについてMediaStoreを伝えるために:

public void scanFile(Context ctxt, File f, String mimeType) { 
    MediaScannerConnection 
     .scanFile(ctxt, new String[] {f.getAbsolutePath()}, 
        new String[] {mimeType}, null); 
} 
+2

はこの作品、ありがとうございます。私は本当に[公式ドキュメント](http://developer.android.com/guide/topics/data/data-storage.html)にこの情報を含めるべきだと思います。私はMediaStoreが最終的にこれらのファイルを単独で見つけることになると思いますか? –

+0

@ transporter_room_3:はい。定期的に外部ストレージをスキャンし、再起動時にファイルの「MediaStore」名簿を更新するGooglebotの小さな版があります。ファイルが最終的に表示されます。 – CommonsWare

関連する問題