2

从 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);

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

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

我不确定这个错误是否只发生在果冻豆中,或者它也取决于硬件模型。谷歌对这个问题只字未提(为什么?为什么?)。有人知道我在哪里可以找到所有设备及其正确相机实现的列表?有人知道最好的方法吗?

4

3 回答 3

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,这个示例应用程序,它使用与您的第一个代码片段中的代码大致相同的代码,在运行 Android 4.2.1 的 Galaxy Nexus 和运行 Android 4.1.2 的 Nexus S 上运行良好,两者都是“果冻豆” ”。

于 2013-01-17T15:54:07.787 回答
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);
    }
于 2013-01-17T15:46:54.400 回答
0

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

画廊相机演示在 Github

于 2013-06-19T12:30:28.317 回答