当使用ActivityResultContracts.TakePicture时,如果出现“找不到文件或目录”的错误,可能是因为在指定的文件路径上没有创建文件。以下是解决此问题的代码示例:
private File photoFile;
private void createPhotoFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
try {
photoFile = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
} catch (IOException e) {
e.printStackTrace();
}
}
createPhotoFile();
ActivityResultLauncher takePictureLauncher = registerForActivityResult(
new ActivityResultContracts.TakePicture(),
result -> {
if (result) {
// 照片成功保存在指定的文件路径中
} else {
// 照片保存失败
}
});
if (photoFile != null) {
Uri photoUri = FileProvider.getUriForFile(this, "your.fileprovider.authority", photoFile);
takePictureLauncher.launch(photoUri);
}
请注意,上述代码中的"your.fileprovider.authority"应替换为您在AndroidManifest.xml文件中定义的FileProvider的authority。
上一篇:ActivityResultContracts.TakePicture-拍照后在屏幕旋转时图片未保存
下一篇:ActivityResultLauncher<Intent>/DoesnotcreateaPDFfile/ACTION_CREATE_DOCUMENT