2015-09-25 14 views
6

Ứng dụng của tôi sẽ lưu tệp vào một nơi, khi bạn kết nối điện thoại/máy tính bảng với máy tính, bạn có thể xem chúng thông qua trình khám phá tệp hệ thống.Cách ghi tệp vào bộ nhớ công khai bên ngoài trong Android để chúng hiển thị trên Windows?

Đây là cách tôi thực hiện tập tin văn bản:

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()); 
} 

Đây là những gì tôi thấy khi kết nối tablet Sony Xperia Z4 của tôi để Windows (thông báo thiếu thư mục tài liệu):

windows file explorer showing tablet contents

Đây là thư mục mà tệp được ghi (sử dụng ở trên triển khai):

android device monitor showing file system

Việc triển khai của tôi có vấn đề gì?

Trả lời

11

Điều gì xảy ra với việc triển khai của tôi sai?

MediaStore chưa phát hiện ra các tệp mới tạo của bạn. Những gì bạn thấy trong Windows — và trong nhiều ứng dụng "gallery" trên thiết bị — được dựa trên những gì MediaStore đã được lập chỉ mục.

Sử dụng MediaScannerConnection và phương pháp scanFile() của nó để bảo MediaStore về tập tin của bạn, một khi bạn đã viết ra dữ liệu của bạn vào đĩa:

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

Cảm ơn bạn, công trình này. Tôi thực sự nghĩ rằng họ nên bao gồm thông tin này trong [tài liệu chính thức] (http://developer.android.com/guide/topics/data/data-storage.html). Tôi lấy nó rằng MediaStore cuối cùng sẽ tự tìm thấy những tập tin này? –

+0

@ transporter_room_3: Có. Có một phiên bản nhỏ của Googlebot quét định kỳ bộ nhớ ngoài, cộng với khi khởi động lại, để cập nhật danh sách tệp của 'MediaStore'. Tập tin cuối cùng sẽ xuất hiện. – CommonsWare

Các vấn đề liên quan