Android 使用getContentResolver()下载Gmail文件附件失败

Android 使用getContentResolver()下载Gmail文件附件失败,android,gmail,Android,Gmail,我正在编写一个过程,下载/复制一个附加到Gmail的文件到SD卡上,然后我的应用程序可以读取。 当用户单击附件时,我的活动被触发,我使用以下代码保存到本地存储 InputStream in = getContentResolver().openInputStream( intent.getData() ); String ext = intent.getType().equals("text/xml") ? ".xml" : ".gpkg"; localFile = new File( TILE

我正在编写一个过程,下载/复制一个附加到Gmail的文件到SD卡上,然后我的应用程序可以读取。 当用户单击附件时,我的活动被触发,我使用以下代码保存到本地存储

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/mexxx@gmail.com/messages/6847/attachments/0.1/BEST/false
而intent.getType是

application/octet-stream

谢谢

使用此代码可以完成所有工作

InputStream in = new BufferedInputStream(
getContentResolver().openInputStream(intent.getData()) );

File dir = getExternalCacheDir();
File file = new File(dir, Utils.md5(uri.getPath()));

OutputStream out = new BufferedOutputStream( new FileOutputStream(file) );

streamCopy(in, out);