Tôi bắt đầu một yêu cầu cho một lựa chọn hình ảnh:Android - Hình ảnh Picker, Hình ảnh sai
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Choose"), PHOTO_GALLERY);
Và nhận được dữ liệu trở lại trong onActivityResult
:
if(resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY)
{
U.log(data.getData());
Bitmap bm = ... // built from the getData() Uri
this.postImagePreview.setImageBitmap(bm);
}
Khi tôi khởi động tiếp cận mục đích, tôi xem một số thư mục, chẳng hạn như sdcard
, Drop Box
, MyCameraApp
, v.v.
Nếu tôi chọn ảnh từ sdcard
, khi tôi tải bản xem trước, đó là hình ảnh hoàn toàn sai. Các thư mục khác dường như không cho tôi vấn đề này.
Có ai biết lý do tại sao nó cho phép tôi chọn một hình ảnh, sau đó cho tôi Uri cho người khác không?
EDIT: Dưới đây là một số exampled đăng nhập getData()
s:
Tốt:
content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210
Xấu:
content://media/external/images/media/28
EDIT: Tôi sti sẽ gặp sự cố khi chọn từ thư mục sdcard của thư viện.
Dưới đây là mở rộng thêm một chút về những gì tôi đang làm trong onActivityResult:
// cursor
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = mContext.getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
// Cursor: /mnt/sdcard/Pic.jpg : /mnt/sdcard/Pic.jpg
U.log("Cursor: " + filePath + " : " + Uri.parse(filePath));
// "regular"
// Regular: content://media/external/images/media/28 : content://media/external/images/media/28
U.log("Regular: " + data.getDataString() + " : " + Uri.parse(data.getDataString()));
// Regular 2: content://media/external/images/media/28 : content://media/external/images/media/28
U.log("Regular 2: " + data.getData() + " : " + data.getData());
mPostImagePreview.setImageBitmap(BitmapFactory.decodeFile(filePath));
mPostImagePreview.setVisibility(View.VISIBLE);
Họ vẫn thiết lập các hình ảnh sai. Nếu tôi đi vào Gallery, dài bấm hình ảnh, và xem chi tiết tôi nhận được:
TItle: Pic
Time: May 2, 2012
Width: 720
Height: 1280
Orientation: 0
File size: 757KB
Maker: Abso Camera
Model: Inspire 4G
Path: /mnt/sdcard/Pic.jpg
Vì vậy, Thư viện là nói cho tôi con đường là giống như các hành động lựa chọn, và Bộ sưu tập được làm cho nó một cách chính xác . Vậy tại sao trên trái đất là nó không hiển thị nếu tôi đặt nó từ onActivityResult?
Ngoài ra, đây là mã tôi đang sử dụng để bắn tiếp cận mục đích bây giờ:
private void selectPhoto()
{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
((Activity)mContext).startActivityForResult(Intent.createChooser(intent, "Select Picture"), PHOTO_GALLERY);
}
Hành vi này có phải là ngẫu nhiên không? Ý tôi là, có bất kỳ mẫu nào bạn nhìn thấy khi bạn lặp lại lựa chọn hình ảnh không ..? – Ronnie
có thể hình thu nhỏ trong thư viện bị sai. điều này có thể xảy ra nếu ví dụ như hình ảnh bị xóa vì Android sử dụng lại id hình ảnh. – uwe
@ userSeven7s: Luôn khi tôi Chọn từ thư mục sdcard của ứng dụng Thư viện. – Josh