有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?

我正在做一个项目,在那里我使用一个相机来给用户拍照。代码是典型的,我创建了一个intent并给它一个输出文件的URI,在activityresult上,我得到了保存在给定URI中的图像,因此简化的代码如下所示:

Uri outputFileURI; //<-- this is where the output picture should be
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileURI);
startActivityForResult(takePictureIntent, MY_CAMERA_REQUEST_CODE);

然后呢,

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MY_CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {
  outputFileURI; // <-- the image is saved in this uri by the camera
  // do something with the uri
}

如果我们使用手机的默认摄像头应用程序,这会很好地工作

问题

如果用户选择不同的摄像头应用程序(在本例中,用户选择的是PicsArt应用程序),则此操作无效。即,picsArt应用程序未将图像保存在uri中。用户可以选择任意的摄像头应用程序,那么解决此问题的正确方法是什么?是否可以限制用户仅使用默认的摄像头应用程序?或者我应该使用CameraX或类似的东西


共 (1) 个答案

  1. # 1 楼答案

    This works nicely if we use the default camera app of the phone

    它可能适用于您测试的数以万计的现有设备型号中的少数设备。预安装的摄像头应用程序和第三方应用程序一样有可能出现漏洞,多年来,这些程序都有漏洞,包括你为PicsArt引用的程序

    If the user chooses a different camera app (in this case, the users are selecting PicsArt app), this doesnot work. ie, the picsArt app is not saving the image in the uri

    向PicsArt提交一个bug。但是,同样,不要假设“默认相机应用程序”意味着“始终工作”,也不要假设“不同的相机应用程序”意味着“从不工作”

    so what is the proper way to fix this issue?

    这很可能是你的经理们的问题。基本上,您有两个主要选择:

      >P>告诉用户“对不起,但你使用的相机应用程序与其他应用程序不太好-请考虑X”,X是你测试过的一些相机应用程序的名称,相信可能是可靠的。例如,我倾向于使用Open Camera作为我的参考应用程序

    1. 不要依赖ACTION_IMAGE_CAPTURE,而是直接从你的应用程序拍照,比如你提到的使用CameraX。好的一面是,你完全可以控制。不利的一面是,这需要做更多的工作,而相机硬件兼容性也带来了自己的一系列难题

    就我个人而言,我的建议是,你的应用程序能够拍照有多重要。如果没有这些照片,应用程序是无用的,直接从应用程序中拍摄照片,并为初始开发和持续维护预算工程和质量保证时间。如果应用程序可以在没有照片的情况下使用,我会继续使用ACTION_IMAGE_CAPTURE,如果用户选择的相机应用程序不能正常工作,我会“优雅地降级”