【问题标题】:Is there any way to do a safe intent to camera for all level apis?有什么方法可以对所有级别的 api 进行安全的摄像头意图吗?
【发布时间】:2013-01-17 15:43:34
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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);
        }
    

    【讨论】:

    • 谢谢,但这真的是最好的解决方案吗?所有具有果冻的设备都支持相同的实现吗?不也是硬件问题吗?
    • 我不确定是不是硬件问题。您也可以使用 try and catch。并尝试这两种实现,这样就不会出错。
    • 但是你怎么能这样做呢?我的意思是当意图完成时——当代码在 onActivityReult 上时,你什么也做不了。回到原来的意图,然后尝试另一种方式是不可能的,不是吗?
    • 您不能将结果设置为 OK,如果它崩溃则使用其他实现。当然,这不是一件好事。但如果设备无法完成这项工作,这是一种解决方法。
    【解决方案2】:

    从 Frojo 到 Icre cream 就是这样

    请理解,您对代码所做的是要求随机应用为您拍照。该随机应用可能是:

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

    但是对于果冻豆它不起作用

    有才华的程序员会解释“它不起作用”是什么意思。

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

    有才华的程序员会解释什么是“错误”。

    除此之外,Android 本身与它几乎没有任何关系。该错误很可能存在于您在“果冻豆”设备上使用的任何相机应用程序中。

    Google 对这个问题只字未提(为什么?,为什么?)。

    有才华的程序员会比“它不起作用”更详细地解释“问题”是什么。

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

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

    如果您觉得MediaStore.ACTION_IMAGE_CAPTURE对您的情况不可靠,欢迎您使用android.hardware.Camera自己拍照。

    另外,FWIW,this sample app,它使用的代码与您的第一个代码 sn-p 中的代码大致相同,在运行 Android 4.2.1 的 Galaxy Nexus 和运行 Android 4.1.2 的 Nexus S 上都可以正常工作,两者都是这是“果冻豆”。

    【讨论】:

      【解决方案3】:

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

      GalleryCameraDemo in Github

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-09
        • 2020-02-27
        • 2015-10-23
        • 2017-01-12
        • 2015-09-10
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多