内容 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
Uri
值 EXTRA_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);
}
我 运行 在 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
Uri
值 EXTRA_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);
}