我正试图通过以下方式使用MediaStore.ACTION_IMAGE_CAPTURE意图拍照:
String fileName = "testphoto.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,
"Image capture by camera");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
imageUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI),
R.id.capture_image_request);
处理活动结果:
try {
uploadedPicture = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageUri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
之后我试图展示刚刚拍摄的照片:
((ImageView) findViewById(R.id.profile_picture_thumbnail)).setImageBitmap(uploadedPicture);
这不起作用。之后,我尝试从该Uri打开一个输入流:
final InputStream is = getContentResolver().openInputStream(uri);
Log.("mydebug tag", is.available());
is.available()返回0.为什么该文件为空???
当我尝试调试时,我发现Uri喜欢“content:// media / external / images / media / 68”。 之后我硬编码:
Uri uri = Uri.parse("content://media/external/images/media/68");
Bitmap pic;
try {
pic = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
((ImageView) findViewById(R.id.profile_picture_thumbnail)).setImageBitmap(pic);
} catch (FileNotFoundException e) {
Log.e(TAG, e.getMessage());
}
这很有效。
所以我想知道为什么当我手动构建Uri时 - 它可以工作,但是当我收到刚拍摄的Uri时 - 它不是吗?我有一种感觉,当我访问Uri刚拍摄的图片时,它还没有存储在文件系统中,这就是为什么它的大小等于0并且无法加载到ImageView中。但过了一段时间(当我再次使用硬编码的Uri运行我的应用程序时)文件被存储并且工作正常。有没有办法强制将该文件刷新到磁盘?