Я пишу процесс, который загружает/копирует файл, прикрепленный к 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
Благодаря