【问题标题】:Content uri crashes camera on Android KitKat内容 uri 在 Android KitKat 上使相机崩溃
【发布时间】:2016-10-17 13:38:21
【问题描述】:

我在 Android API 19 (Kitkat) 上使用 content uri 和 FileProvider 时遇到了问题。这是我用来在设备上打开相机并录制视频的代码:

File file = new File(pathname);
Uri fileUri = FileProvider.getUriForFile(this, AUTHORITY_STRING, file);

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, requestCode);

我已经在 API 23-24 上测试了这段代码,它工作得很好,但是在我开始在相机应用程序中拍摄视频后,在 API 19 上,相机以 RESULT_CANCELED 关闭。 当我尝试使用 ACTION_IMAGE_CAPTURE 动作拍照时,也会发生同样的事情。 我试图用 Uri.fromFile() 更改 FileProvider.getUriForFile()。这在 Kitkat 上完美运行,但我无法在 Android 7 上使用它。 为什么 Adnroid Kitkat 上的 Camera 不想使用 content uri?

【问题讨论】:

    标签: android android-4.4-kitkat android-fileprovider


    【解决方案1】:

    也许你可以试试这个。

        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){
            fileUri = Uri.fromFile(mTmpFile);
        } else {
            fileUri = FileProvider.getUriForFile(getContext(),
                    getContext().getPackageName()+".provider",mTmpFile);
        }
    

    【讨论】:

    • 这就是答案。谢谢
    【解决方案2】:

    并非所有相机应用都支持content UriEXTRA_OUTPUT 值,尽管它们应该支持。但是,有数以千计的相机应用程序,在这样的Uri 上会有一定比例的失败。例如,直到今年夏天,Google 自己的相机应用程序才支持 content Uri for EXTRA_OUTPUT for ACTION_VIDEO_CAPTURE

    要么停止使用ACTION_VIDEO_CAPTURE,要么接受不可靠的结果。

    如果您希望继续使用 file Uri 值,请将您的 targetSdkVersion 设置为 23 或更低,或者通过更改 StrictMode 配置来禁用 FileUriExposedException

    【讨论】:

    • 感谢您的快速回答。
    • 所以如果我想将 API 24 作为 targetSdkVersion 并继续使用内容 Uri,我无法在某些设备上防止此错误?
    • @Yenn:你不能强迫相机应用开发者支持 content Uri 值,如果这就是你的意思的话。
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2018-06-06
    相关资源
    最近更新 更多