Android – ImageView如何获取相机图片? resultCode是0,requestCode是2?

获取resultCode = 0和requestCode = 2,不能得到picView与图片。

import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { final int CAMERA_CAPTURE = 1; final int PIC_CROP = 2; private Uri picUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button captureBtn = (Button)findViewById(R.id.capture_btn); captureBtn.setOnClickListener(this); } /** * Click method to handle user pressing button to launch camera */ public void onClick(View v) { if (v.getId() == R.id.capture_btn) { try { Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(captureIntent, CAMERA_CAPTURE); } catch(ActivityNotFoundException anfe){ String errorMessage = "Whoops - your device doesn't support capturing images!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } } /** * Handle user returning from both capturing and cropping the image */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if(requestCode == CAMERA_CAPTURE){ picUri = data.getData(); performCrop(); } else if(requestCode == PIC_CROP){ Bundle extras = data.getExtras(); Bitmap thePic = extras.getParcelable("data"); ImageView picView = (ImageView)findViewById(R.id.picture); picView.setImageBitmap(thePic); } } else { String errorMessage = "Whoops - resultCode return: " + resultCode +" requestCode: " + requestCode; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } /** * Helper method to carry out crop operation */ private void performCrop(){ try { Intent cropIntent = new Intent("com.android.camera.action.CROP"); cropIntent.setDataAndType(picUri, "image/*"); cropIntent.putExtra("crop", "true"); cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); cropIntent.putExtra("outputX", 256); cropIntent.putExtra("outputY", 256); cropIntent.putExtra("return-data", true); startActivityForResult(cropIntent, PIC_CROP); } catch(ActivityNotFoundException anfe){ String errorMessage = "Whoops - your device doesn't support the crop action!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } } 

编辑:(如下所示添加data.getData()总是null)

 final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200; public void onClick(View v) { if (v.getId() == R.id.capture_btn) { try { Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //startActivityForResult(captureIntent, CAMERA_CAPTURE); startActivityForResult(captureIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); } catch(ActivityNotFoundException anfe){ String errorMessage = "Whoops - your device doesn't support capturing images!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Image captured and saved to fileUri specified in the Intent Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture } else { // Image capture failed, advise user } } if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Video captured and saved to fileUri specified in the Intent Toast.makeText(this, "Video saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the video capture } else { // Video capture failed, advise user } } } 

编辑2:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { //super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if(requestCode == CAMERA_CAPTURE){ picUri = data.getData(); performCrop(); } else if(requestCode == PIC_CROP){ Bundle extras = data.getExtras(); Bitmap thePic = extras.getParcelable("data"); ImageView picView = (ImageView)findViewById(R.id.picture); picView.setImageBitmap(thePic); } } else { String errorMessage = "Whoops - resultCode return: " + resultCode +" requestCode: " + requestCode; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); Bundle extras = data.getExtras(); Bitmap thePic = extras.getParcelable("data"); ImageView picView = (ImageView)findViewById(R.id.picture); picView.setImageBitmap(thePic); } } 

如果resultCode是0,那么这意味着您调用的活动已被取消。 要么他们必须按下按钮,orso回到这个活动。 变化是你的实现是错误的。