我设置了一个数据成员imageUri,并将其传递给启动相机活动的意图。在相机活动中,我拍照并旋转屏幕,然后单击复选框以返回到我的活动。当我这样做时,调用onActivityResult时imageUri为null。如果我不旋转屏幕,一切正常,并且imageUri不为null。
onConfigurationChanged没有在我的活动中被调用,所以这不是问题。
public void takePhoto() {
//define the file-name to save photo taken by Camera activity
fileName = getFileNameDate();
//create parameters for Intent with filename
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//create new Intent
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, picture_result_code);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("Camera_onActivityResult", "Got activity result requestCode = " + requestCode + " resultCode: " + resultCode);
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case picture_result_code:
if (resultCode == Activity.RESULT_OK) {
try {
Log.i("Camera", "Preparing to upload image...");
picFile = convertImageUriToFile(imageUri); // Here imageUri is null and causing crash
uploadFile(picFile.getPath());
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
Log.e("Camera", e.toString());
e.printStackTrace();
}
}
}
}
还有其他方法可以检索图像吗?
谢谢
我相信imageUri是您活动的领域,对吗?如果旋转设备,则活动将被破坏并重新启动,并且您的字段为null。您必须将URI保存为活动状态的一部分。有几种方法可以实现这一点,即使用onSaveInstanceState(),有关更多详细信息,请参见此处:http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29
锁定调用活动的屏幕方向为我解决了此问题。如果您不想锁定自己的图像,则可以创建一个方向锁定的“活动”,仅用于调用相机,然后将结果返回到“真实”活动。
Istvan Jonyer。非常感谢。我的问题解决了。当我在手机银河J510 J5 2016中关闭自动旋转设置并横向旋转相机时,出现错误。但你帮我。