gpt4 book ai didi

java - 使用 ACTION_IMAGE_CAPTURE Intent 时如何正确捕获 Android 相机 Activity 的错误

转载 作者:行者123 更新时间:2023-12-01 10:04:30 26 4
gpt4 key购买 nike

在 Android 中,可以通过此基本设置来完成拍照,如 here 所示。 .

protected void dispatchTakePictureIntent(){
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

...
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
//do stuff with the output file
}
}

但是,third-party camera apps are unpredictable and cannot be guaranteed to play nice .

验证输出/捕获任何错误的正确方法是什么?我应该将 startActivityForResult 包装在 try/catch block 内吗?我应该 try catch 哪些类型的异常以及我应该如何处理它们?

最佳答案

Should I be wrapping startActivityForResult inside of a try/catch block?

是的,尽管这与 ACTION_IMAGE_CAPTURE 无关具体来说。用户可能无权访问相机应用程序(例如,用户在共享设备上的受限配置文件下运行)。随时调用startActivity()startActivityForResult()隐含 Intent ,您需要处理没有可用应用程序的可能性。

What are the various types of exceptions I should be trying to catch and what should I do with them?

在您链接到的答案中,我指出相机应用程序中的崩溃。您无法捕捉到这些,因为那不是您的应用程序。

超越ActivityNotFoundException ,您还需要考虑 Android 6.0 运行时权限,因为您需要 CAMERA允许启动 ACTION_IMAGE_CAPTURE Activity 。不过,通常这不会涉及异常处理程序。

其他验证不是基于异常,而是基于有缺陷的结果:

  • 如果您提供 EXTRA_OUTPUTUri有什么内容吗?你指定了吗?理论上,如果用户没有取消退出相机应用程序,由于相机应用程序的错误,一定会退出,但不能保证。

  • 如果有内容,它可能是图像文件吗?例如,您可以使用 BitmapFactoryinJustDecodeBounds看看图像是否真的是图像。

  • 如果没有内容,你是否碰巧得到了Uri返回结果IntentonActivityResult() ? buggy 相机应用程序可能已将图像存储在它想要的位置并提供 Uri对此,即使这超出了 ACTION_IMAGE_CAPTURE 的规范.

  • 如果没有内容,则没有UrigetExtras("data")返回非 null值(value)?在这种情况下,您至少可以获得缩略图并可以自己保存,即使图像质量可能很差。

关于java - 使用 ACTION_IMAGE_CAPTURE Intent 时如何正确捕获 Android 相机 Activity 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36552921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com