Android 如何显示用户刚用相机拍摄的图像
我正在尝试为用户提供从手机存储器中选择图像或使用手机摄像头应用程序拍摄图像,然后在imageView中显示该图像的选项。在和问题的帮助下,我能够在从存储器中选择图像时显示图像。但是,如果我选择使用相机拍照,尽管我没有收到错误,图像不会显示在imageView中 选择图片的功能如下所示:Android 如何显示用户刚用相机拍摄的图像,android,image,camera,Android,Image,Camera,我正在尝试为用户提供从手机存储器中选择图像或使用手机摄像头应用程序拍摄图像,然后在imageView中显示该图像的选项。在和问题的帮助下,我能够在从存储器中选择图像时显示图像。但是,如果我选择使用相机拍照,尽管我没有收到错误,图像不会显示在imageView中 选择图片的功能如下所示: public void choosePic(View view) { Intent pickIntent = new Intent(); pickIntent.setType("image/*")
public void choosePic(View view) {
Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String pickTitle = "Select or take a new Picture"; // Or get from strings.xml
Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
chooserIntent.putExtra
(
Intent.EXTRA_INITIAL_INTENTS,
new Intent[] { takePhotoIntent }
);
startActivityForResult(chooserIntent, SELECT_PICTURE);
}
之后由
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_IMAGE && data != null && data.getData() != null) {
Uri _uri = data.getData();
//User had pick an image.
Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
image = (ImageView) findViewById(R.id.imageView);
image.setImageURI(_uri);
cursor.close();
}
super.onActivityResult(requestCode, resultCode, data);
}
编辑
在@Murtaza Hussain的帮助下,我找到了一个可行的解决方案:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("requestCode",""+requestCode);
if(requestCode == PICK_IMAGE && resultCode==RESULT_OK && data != null && data.getData() != null) {
Uri _uri = data.getData();
//User had pick an image.
Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
image = (ImageView) findViewById(R.id.imageView);
image.setImageURI(_uri);
cursor.close();
}
else if(requestCode== PICK_IMAGE && resultCode==RESULT_OK && data.getData() == null){
Bundle extras = data.getExtras();
Bitmap thePic = extras.getParcelable("data");
image =(ImageView) findViewById(R.id.imageView);
image.setImageBitmap(thePic);
}
super.onActivityResult(requestCode, resultCode, data);
}
您需要在ActivityResult()中为其添加代码
在您的活动中,何时从相机捕获图像。编写下面的代码
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"/imageLarge"+System.currentTimeMillis()+".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
try {
intent.putExtra("return-data", true);
startActivityForResult(intent, 111);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
在onActivityResult()中编写以下代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 111:
if(resultCode == RESULT_OK)
{
Log.v("","After camera capture path is --> "+mImageCaptureUri.toString().substring(8));
Bitmap bitmap=BitmapFactory.decodeFile(mImageCaptureUri.toString().substring(8));
image.setImageBitmap(bitmap);
}
else
{
}
}
}
不要忘记添加一个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果有任何疑问,请告诉我。谢谢。您确定requestCode==0&&resultCode==RESULT\u OK正确吗?看来这永远不会是真的。对不起,我的错。虽然上面写了两次请求代码,但我想我需要一杯咖啡。将向我的问题添加更新的代码。请尝试记录请求代码。这应该与画廊的意图不同。让我们来看看。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />