我正在使用相机 Intent 拍摄照片,这在我的默认版本应用中按预期工作。
我为“Android for Work”版本的应用程序实现了相同的代码,但出现了奇怪的行为。通常情况下,根据“Android for Work”视频,在不同配置文件中不能处理 Intent。例如,如果在“Work Profile”中未安装相机应用程序,则在解析 Camera Intent 后,Camera Intent 应该为 null,这是预期的。
但在我的情况下,Camera Intent 被安装在默认用户配置文件中的相机应用程序处理(“Work Profile”没有相机应用程序)。当拍摄照片时,它将以 Activity.RESULT_CANCELED 的 resultCode 返回到 onActivityResult 中。
所以,我的问题是,如何区分用户的 “Real Cancel Event” 和此情况?两者都具有相同的结果,即 Activity.RESULT_CANCELED。
以下是我启动相机 Intent 的示例代码。
我为“Android for Work”版本的应用程序实现了相同的代码,但出现了奇怪的行为。通常情况下,根据“Android for Work”视频,在不同配置文件中不能处理 Intent。例如,如果在“Work Profile”中未安装相机应用程序,则在解析 Camera Intent 后,Camera Intent 应该为 null,这是预期的。
但在我的情况下,Camera Intent 被安装在默认用户配置文件中的相机应用程序处理(“Work Profile”没有相机应用程序)。当拍摄照片时,它将以 Activity.RESULT_CANCELED 的 resultCode 返回到 onActivityResult 中。
所以,我的问题是,如何区分用户的 “Real Cancel Event” 和此情况?两者都具有相同的结果,即 Activity.RESULT_CANCELED。
以下是我启动相机 Intent 的示例代码。
/* Create Camera Intent */
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
/* Check if the Camera Intent is Available */
if (cameraIntent.resolveActivity(getActivity().getPackageManager()) == null) {
/* Notify User in Error Case */
UIUtils.notifyUser(getActivity(), getString(R.string.error), getString(R.string.no_camera_application_found));
} else {
/* Create a new File with Random Photo Name */
takenPhoto = new File(FileUtils.getExternalPhotoCacheDirectory(), generatePhotoName());
takenPhoto.createNewFile();
/* Create Uri to send to within the Intent */
Uri outputFileUri = Uri.fromFile(takenPhoto);
/* Set Photo destination File Uri */
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
/* Start Activity for Result */
startActivityForResult(cameraIntent, ACTION_TAKE_PHOTO);
}
resolveActivity
进行操作。但是出乎意料的是,它并没有返回 null。 - osayilgan