对于所有级别的api,有没有办法安全地使用相机?

时间:2013-01-17 15:43:34

标签: android android-intent camera android-4.2-jelly-bean

从Froyo到冰淇淋三明治就是这样:

Intent intent = new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");
tempUriCameraDeviceNotSuported = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
tempUriCameraDeviceNotSuported);
startActivityForResult(intent, 0);

但是对于Jelly Bean它不起作用,你必须做这样的事情:

Intent takePicture = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);

我不确定这个bug是否仅在软糖豆中发生,或者它还取决于硬件模型。谷歌没有说出这个问题(为什么?为什么?)。有人知道在哪里可以找到包含所有设备及其正确相机实现的列表?有人知道最好的方法吗?

3 个答案:

答案 0 :(得分:1)

您始终可以检查操作系统版本:

    if (android.os.Build.VERSION.SDK_INT >= 17) {
        Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(takePicture, 0);
    } else {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = new File(Environment.getExternalStorageDirectory(),
                "test.jpg");
        tempUriCameraDeviceNotSuported = Uri.fromFile(file);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                tempUriCameraDeviceNotSuported);
        startActivityForResult(intent, 0);
    }

答案 1 :(得分:1)

  从Frojo到Icre cream这是

的方式

请理解您正在使用代码执行的操作是让随机应用为您拍照。随机应用可能是:

  • AOSP相机应用,或
  • 设备制造商的替换相机应用程序,或
  • 用户安装的相机应用,或
  • 选择支持MediaStore.ACTION_IMAGE_CAPTURE恰好驻留在设备上的任何其他内容
  

但对于果冻豆它不起作用

才华横溢的程序员会解释“它不起作用”的含义。

  

我不确定这个错误是否仅在果冻豆中发生

才华横溢的程序员会解释“这个错误”是什么。

除此之外,Android本身几乎没有任何关系。最有可能的错误是你在那个“果冻豆”设备上使用的相机应用程序。

  

谷歌没有说出这个问题(为什么?,为什么?)。

有才能的程序员会更详细地解释“问题”的内容而不是“它不起作用”。

  

有人知道在哪里可以找到包含所有设备及其正确相机实施的列表?

有超过1,000款Android设备。我有理由相信Play商店和其他地方有超过1,000个应用程序是“相机应用程序”或支持MediaStore.ACTION_IMAGE_CAPTURE。这意味着您的列表中有超过1,000,000个设备和应用程序组合。欢迎您自己开发这样的列表。

如果您认为MediaStore.ACTION_IMAGE_CAPTURE对您的案件不可靠,欢迎您使用android.hardware.Camera自行拍照。

此外,FWIW,this sample app使用与第一个代码段相同的代码,在运行Android 4.2.1的Galaxy Nexus和运行Android 4.1.2的Nexus S上运行良好。这是“果冻豆”。

答案 2 :(得分:0)

检查我的示例,实际上它适用于2.3.3和4.1和4.2试一试!

GalleryCameraDemo in Github