Android:从第三方相机应用程序获取照片时出现 ENOENT 错误
Android: ENOENT error getting photo from a third-party camera app
我正在使用 stock Android Java code 从我的应用中拍照。它适用于默认相机。当我使用第三方相机应用程序时,我收到一个错误弹出窗口(不是来自我的应用程序)并且该应用程序收到的图像是空白的:/myapp_app_images/JPEG_20191016....jpg: open failed: ENOENT (no such file or directory)
。 myapp_app_images
路径在 file_paths.xml 中设置为 external-path
:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myapp_app_images" path="Android/data/com.myapp/files/Pictures" />
</paths>
使用第三方相机应用程序,我的应用程序永远达不到我 Activity 的 onActivityResult
。它使用原生相机。
这是第三方应用程序的缺陷吗?如果是,我这边有解决方法吗?我的一个想法是,也许来自第三方相机的照片被保存到它无法访问的位置,或者路径报告不正确或缺少完整路径。但我不确定如何检查或解决这些问题中的任何一个,或者是否有其他原因。
我的意图和处理程序,为清楚起见缩短了一些错误处理:
private void goToCamera() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
...
}
if (photoFile != null) {
Uri photoUri = FileProvider.getUriForFile(this, "com.myapp.fileprovider", photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(takePictureIntent, REQUEST_PHOTO_CAPTURE);
} else {
...
}
}
}
这很可能是第三方应用程序中的一个错误,它没有正确实现对 ACTION_IMAGE_CAPTURE 意图的处理。
例如,它可能只需要 file:// URI,而不是现在需要的 content:// URI。或者其他问题。
不幸的是,解决此问题的唯一方法可能是第三方应用程序的应用程序开发人员这样做。
我正在使用 stock Android Java code 从我的应用中拍照。它适用于默认相机。当我使用第三方相机应用程序时,我收到一个错误弹出窗口(不是来自我的应用程序)并且该应用程序收到的图像是空白的:/myapp_app_images/JPEG_20191016....jpg: open failed: ENOENT (no such file or directory)
。 myapp_app_images
路径在 file_paths.xml 中设置为 external-path
:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myapp_app_images" path="Android/data/com.myapp/files/Pictures" />
</paths>
使用第三方相机应用程序,我的应用程序永远达不到我 Activity 的 onActivityResult
。它使用原生相机。
这是第三方应用程序的缺陷吗?如果是,我这边有解决方法吗?我的一个想法是,也许来自第三方相机的照片被保存到它无法访问的位置,或者路径报告不正确或缺少完整路径。但我不确定如何检查或解决这些问题中的任何一个,或者是否有其他原因。
我的意图和处理程序,为清楚起见缩短了一些错误处理:
private void goToCamera() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
...
}
if (photoFile != null) {
Uri photoUri = FileProvider.getUriForFile(this, "com.myapp.fileprovider", photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(takePictureIntent, REQUEST_PHOTO_CAPTURE);
} else {
...
}
}
}
这很可能是第三方应用程序中的一个错误,它没有正确实现对 ACTION_IMAGE_CAPTURE 意图的处理。
例如,它可能只需要 file:// URI,而不是现在需要的 content:// URI。或者其他问题。
不幸的是,解决此问题的唯一方法可能是第三方应用程序的应用程序开发人员这样做。