繁体   English   中英

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

[英]How to properly handle camera intent in android if the user chooses some random camera app?

我正在做一个项目,我正在使用相机意图为用户拍照。 代码是典型的,我创建了一个意图并给它 output 文件的 URI,然后在 onActivityResult 中,我将图像保存在给定的 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或类似的东西?

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

它可能适用于您在数以万计的现有设备模型中测试过的少数设备。 预装的相机应用程序与第三方应用程序一样可能存在错误,多年来, 许多预装的相机应用程序都有错误,包括您为 PicsArt 引用的那些。

如果用户选择不同的相机应用程序(在这种情况下,用户选择 PicsArt 应用程序),这不起作用。 即,picsArt 应用程序未将图像保存在 uri 中

使用 PicsArt 提交错误。 但是,同样,不要假设“默认相机应用程序”意味着“总是有效”,也不要假设“不同的相机应用程序”意味着“永远无法工作”。

那么解决此问题的正确方法是什么?

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

  1. 告诉用户“抱歉,您使用的相机应用程序与其他应用程序无法很好地配合使用 - 请考虑尝试 X”,其中 X 是您已测试并认为可能可靠的某些相机应用程序的名称。 例如,我倾向于使用 Open Camera 作为我的参考应用程序。

  2. 不要依赖ACTION_IMAGE_CAPTURE ,而是直接从您的应用程序中拍照,例如使用您提到的 CameraX。 从好的方面来说,你有完全的控制权。 不利的一面是,这需要更多的工作,而且相机硬件兼容性也带来了一系列令人头疼的问题。

就个人而言,我在两者之间的建议归结为您的应用能够拍照的重要性。 如果没有这些照片,应用程序毫无用处,请直接从您的应用程序中获取照片,并为初始开发和持续维护预算工程和 QA 时间。 如果应用程序可以在没有照片的情况下使用,我会继续使用ACTION_IMAGE_CAPTURE ,如果用户选择的相机应用程序不能正常工作,我会“优雅地降级”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM