我有一个包含多个 Activity 的 android 应用程序。
在其中一个中,我使用了一个会调用设备摄像头的按钮:
public void onClick(View view) {
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoIntent, IMAGE_CAPTURE);
}
在同一个 Activity 中,我为图像结果调用 OnActivityResult
方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_CAPTURE) {
if (resultCode == RESULT_OK) {
Bitmap image = (Bitmap) data.getExtras().get("data");
ImageView imageview = (ImageView) findViewById(R.id.pic);
imageview.setImageBitmap(image);
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
}
}
}
问题是intent data
为null,OnActivityResult
方法直接转到(resultCode == RESULT_CANCELED)
和应用返回上一个 Activity 状态。
如何解决这个问题,在调用相机后,应用程序返回到当前 Activity ,其中包含一个 ImageView
,其中包含拍摄的照片?
谢谢
最佳答案
只有在返回的 Intent 中传回缩略图时,默认的 Android 相机应用才会返回非空 Intent。如果您将 EXTRA_OUTPUT
与要写入的 URI 一起传递,它将返回 null
Intent ,并且图片在您传入的 URI 中。
您可以通过查看 GitHub 上的相机应用源代码来验证这一点:
-
Bundle newExtras = new Bundle(); if (mCropValue.equals("circle")) { newExtras.putString("circleCrop", "true"); } if (mSaveUri != null) { newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, mSaveUri); } else { newExtras.putBoolean("return-data", true); }
我猜你要么以某种方式传入了 EXTRA_OUTPUT
,要么手机上的相机应用程序工作方式不同。
关于安卓相机 : data intent returns null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9890757/