内容 uri 在 Android KitKat 上使相机崩溃

Content uri crashes camera on Android KitKat

我 运行 在 Android API 19 (Kitkat) 上使用内容 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 上的相机不想使用内容 uri?

并非每个相机应用都支持 content UriEXTRA_OUTPUT,尽管它们应该支持。但是,有成千上万的相机应用程序,并且有一部分会在这样的 Uri 上失败。例如,直到今年夏天,Google 自己的相机应用程序不支持 content Uri for EXTRA_OUTPUT for ACTION_VIDEO_CAPTURE

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

如果您希望继续使用 file Uri 值,请将 targetSdkVersion 降至 23 或更低,或者通过更改 StrictMode配置。

也许你可以试试这个。

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