Cảm ơn bạn Lokesh Kumar, mã của bạn đã giúp rất nhiều! Tuy nhiên, tôi muốn nêu bật vấn đề với giải pháp của bạn.
Khi cố gắng sử dụng mã này của bạn:
FileOutputStream tmp = new FileOutputStream(getCacheDir().getPath() + "/temp.myfile");
byte[] buffer = new byte[1024];
while (attachment.read(buffer) > 0)
tmp.write(buffer);
tmp.close();
attachment.close();
nó đã sao chép vào toàn bộ tập tin, nhưng tôi nghĩ có một vấn đề. Khi thực hiện attachment.read(buffer)
, bạn đang đọc 1024 byte mỗi lần và cho phép nói rằng bạn có tệp 2000 byte. Trong lần đọc đầu tiên, bạn sẽ nhận được 1024 đầu tiên, sau đó vào lần đọc tiếp theo và cuối cùng, bạn sẽ nhận được 976 byte cuối cùng và từ những gì tôi thấy, trong trường hợp này, bộ đệm không làm sạch các byte cuối cùng. từ các bản xem trước, phần cuối của tệp sẽ là 976 byte từ lần đọc cuối cùng và 48 phần còn lại từ bài đọc trước lần đọc cuối cùng. Điều này sẽ làm cho phần cuối của tệp không chính xác.
Trong trường hợp của tôi, Tệp đính kèm là tệp kml (tệp dữ liệu vị trí dưới dạng xml) mà tôi phải sao chép. Bằng cách cố gắng sử dụng mã này tôi luôn luôn có kết thúc của kml không chính xác. sau khi đóng thẻ, tôi nhận được một số văn bản được đọc từ trước khi đọc.
Something như thế này:
</Document>
</kml>
278
34.81186031,31.96118044
34.81184437,31.96122622
34.81181701,31.96127052
34.81182701,31.9612875
Tất nhiên, đây không phải là một kml hợp lệ, và nó sẽ gây ra lỗi khi cố gắng pars nó.
Vì vậy, tôi đã sử dụng một số mã khác để đọc từ luồng đầu vào đã làm công việc tốt hơn.
Đây là mã của tôi để sao chép các tập tin:
InputStream attachment = getContentResolver().openInputStream(container.uri);
FileOutputStream tmp = new FileOutputStream(container.fileName);
BufferedInputStream bis = new BufferedInputStream(attachment);
StringBuffer b = new StringBuffer();
while (bis.available() != 0) {
char c = (char) bis.read();
b.append(c);
}
bis.close();
attachment.close();
tmp.write(String.valueOf(b).getBytes());
tmp.close();
tôi muốn lấy hình ảnh đính kèm từ ứng dụng Gmail để ứng dụng của tôi qua ý định share nhưng tôi không thể giải mã uri của tập tin như u quy định trong bài đăng "content: //gmail-ls/messages/mailid%40gmail.com/4/attachments/0.1/BEST/false" Xin vui lòng giúp đỡ. –