我有一个包含多个活动的android应用程序.
在其中一个我正在使用一个按钮,它将调用设备摄像头:
public void onClick(View view) {
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoIntent, IMAGE_CAPTURE);
}
Run Code Online (Sandbox Code Playgroud)
在同一个活动中,我调用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是intent data是null并且OnActivityResult方法直接转到,(resultCode == RESULT_CANCELED)并且应用程序返回到先前的avtivity.
如何修复此问题,并在调用相机后,应用程序返回当前活动,其中包含ImageView将包含拍摄的照片?
谢谢
谷歌提供这个多功能的代码,通过意图拍摄照片:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果你像我一样想要将照片作为附加照片传递,那么EXTRA_OUTPUT看似使用照片数据并使后续操作认为意图数据为空.
看来这是Android的一个大错误.
我正在尝试拍摄照片,然后在新视图中将其显示为缩略图.我想将它保存为用户图库中的全尺寸图像.有没有人知道如何指定图像位置而不使用EXTRA_OUTPUT?
这是我目前的情况:
public void takePhoto(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
// takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, …Run Code Online (Sandbox Code Playgroud)