为什么相机不打算 return 调用 Activity?
Why does the camera intent not return to calling Activity?
我正在创建一个隐含的 android 意图。 phone 的相机应用程序打开。但是,当我拍照时,相机应用程序关闭但启动相机意图的 Activity 未打开。 phone 转到主屏幕。如果我重新打开应用程序,它仍在相机应用程序中。我可以单击相机的后退按钮并返回 Activity。
意图从这一行开始。
startActivityForResult(takePhotoIntent, IMAGE_REQUEST_CODE);
这是我正在创建的意图。
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
然后我将 MediaStore.EXTRA_OUTPUT 添加到 intent
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException e) {
// Error occurred while creating the File
//TODO
Log.e(TAG, e.toString());
return null;
}
// Continue only if the File was successfully created
if (photoFile != null && photoFile.exists()) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.markd.android.fileprovider",
photoFile);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
} else {
Log.e(TAG, "photoFile not configured");
}
} else {
Log.e(TAG, "ResolveActivity is null");
}
}
这里是createImageFile方法。
private File createImageFile() throws IOException {
File image = File.createTempFile(
"home_image_" + UUID.randomUUID().toString(), /* prefix */
".jpg", /* suffix */
getExternalFilesDir(Environment.DIRECTORY_PICTURES) /* directory */
);
if(image.getParentFile().mkdirs()) {
Log.e(TAG, "mkdirs:true");
} else {
Log.e(TAG, "mkdirs:false");
}
if(image.exists()) {
Log.e(TAG, "Image exists");
Log.e(TAG, "Path:"+image.getAbsolutePath());
} else {
Log.e(TAG, "Image does not exist");
}
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}
这是在 returns 但未记录任何内容时应调用的函数。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult");
if (requestCode == IMAGE_REQUEST_CODE) {
if(resultCode == Activity.RESULT_OK) {
//Process result
} else {
Log.d(TAG, "Result not okay");
}
} else {
Log.e(TAG, "Unknown Request");
}
super.onActivityResult(requestCode, resultCode, data);
}
它正在摩托罗拉 XT1028 Android 5.1、API 22 上进行测试。
您需要调用方法setResult
Uri photoURI = FileProvider.getUriForFile(this,
"com.markd.android.fileprovider",
photoFile);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
setResult(RESULT_OK, takePhotoIntent);
希望对您有所帮助
原来是操作失误。代码是正确的。我正在按下主页按钮,这是一个软按钮,我认为它是拍照的按钮。我需要触摸屏幕才能拍照。这不是一个按钮。
我正在创建一个隐含的 android 意图。 phone 的相机应用程序打开。但是,当我拍照时,相机应用程序关闭但启动相机意图的 Activity 未打开。 phone 转到主屏幕。如果我重新打开应用程序,它仍在相机应用程序中。我可以单击相机的后退按钮并返回 Activity。
意图从这一行开始。
startActivityForResult(takePhotoIntent, IMAGE_REQUEST_CODE);
这是我正在创建的意图。
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
然后我将 MediaStore.EXTRA_OUTPUT 添加到 intent
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException e) {
// Error occurred while creating the File
//TODO
Log.e(TAG, e.toString());
return null;
}
// Continue only if the File was successfully created
if (photoFile != null && photoFile.exists()) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.markd.android.fileprovider",
photoFile);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
} else {
Log.e(TAG, "photoFile not configured");
}
} else {
Log.e(TAG, "ResolveActivity is null");
}
}
这里是createImageFile方法。
private File createImageFile() throws IOException {
File image = File.createTempFile(
"home_image_" + UUID.randomUUID().toString(), /* prefix */
".jpg", /* suffix */
getExternalFilesDir(Environment.DIRECTORY_PICTURES) /* directory */
);
if(image.getParentFile().mkdirs()) {
Log.e(TAG, "mkdirs:true");
} else {
Log.e(TAG, "mkdirs:false");
}
if(image.exists()) {
Log.e(TAG, "Image exists");
Log.e(TAG, "Path:"+image.getAbsolutePath());
} else {
Log.e(TAG, "Image does not exist");
}
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}
这是在 returns 但未记录任何内容时应调用的函数。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult");
if (requestCode == IMAGE_REQUEST_CODE) {
if(resultCode == Activity.RESULT_OK) {
//Process result
} else {
Log.d(TAG, "Result not okay");
}
} else {
Log.e(TAG, "Unknown Request");
}
super.onActivityResult(requestCode, resultCode, data);
}
它正在摩托罗拉 XT1028 Android 5.1、API 22 上进行测试。
您需要调用方法setResult
Uri photoURI = FileProvider.getUriForFile(this,
"com.markd.android.fileprovider",
photoFile);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
setResult(RESULT_OK, takePhotoIntent);
希望对您有所帮助
原来是操作失误。代码是正确的。我正在按下主页按钮,这是一个软按钮,我认为它是拍照的按钮。我需要触摸屏幕才能拍照。这不是一个按钮。