在我的 Android 应用程序中,我使用相机 Intent 捕捉图像。所以我有一个包含不同项目的 listview,当点击一个项目时,会显示一个 Activity ,用户可以在其中拍照。以下是相机 Intent 的代码:
cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraintent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
startActivityForResult(cameraintent, CAMERA_KEY);
这里是 onActivityResult()
的代码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == CAMERA_KEY) {
callDialog();
} else {
}
} else if (resultCode == Activity.RESULT_CANCELED) {
}
}
与几部智能手机配合使用时,它可以完美运行。但是对于 Sony Experia Z,有时结果代码是 0 而不是 -1 以表示成功拍摄照片。我用 logcat 测试了这个。调用 Activity 将暂停,当从相机 Intent 中恢复时,结果代码似乎丢失了。也许是因为调用 Activity 处于暂停状态并且 onResume 将在 onActivityResult 方法之后调用? (也可以在 logcat 中查看)那么如何保证我从相机 Intent 中得到正确的结果代码呢?
这是生命周期问题吗?因为似乎每一行项目中的每一张图片(在更新数据之后)都在发生这种情况?
最佳答案
所以我真的不知道这是否是唯一正确的答案,但这解决了我的问题。我将代码更改为以下内容,现在可以使用了。似乎有些设备需要显式命名文件名等。
fileName = getCurrentTime() + "tmp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mImageCaptureUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent cameraintent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
cameraintent
.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
cameraintent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
startActivityForResult(cameraintent, CAMERA_KEY);
关于Android 相机 Intent 结果代码有时是错误的/Sony Xperia Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081866/