1
我正在編寫一個過程,將附加到Gmail的文件下載/複製到SD卡上,然後我的應用程序可以讀取該文件。 當用戶點擊附件時,我的活動被激發,並使用下面的代碼保存到本地存儲;Gmail文件附件下載失敗getContentResolver()
InputStream in = getContentResolver().openInputStream(intent.getData());
String ext = intent.getType().equals("text/xml") ? ".xml" : ".gpkg";
localFile = new File(TILE_DIRECTORY, "tmp/"+intent.getDataString().hashCode()+ext);
// If we haven't already cached the file, go get it..
if (!localFile.exists()) {
localFile.getParentFile().mkdirs();
FileIO.streamCopy(in, new BufferedOutputStream(new FileOutputStream(localFile)));
}
FileIO.streamCopy很簡單;
public static void streamCopy(InputStream in, OutputStream out) throws IOException{
byte[] b = new byte[BUFFER];
int read;
while ((read = in.read(b)) != -1) {
out.write(b, 0, read);
}
out.close();
in.close();
}
這一切工作正常的小文件,但與6Mb附件只有12Kb是越來越寫。我甚至沒有收到錯誤,這個過程很快就會完成,而且我還剩下一個損壞的文件。
這個過程是運行在自己的線程,並與很多FILEIO較大的應用程序的一部分,所以沒有問題的權限/目錄等
有不同的東西,我應該用做流?
順便說一句,intent.getData()是
content://gmail-ls/[email protected]/messages/6847/attachments/0.1/BEST/false
和intent.getType()是
application/octet-stream
感謝