android - 如何从意图打开默认文件应用程序中的 DCIM/Camera 文件夹
问题描述
我正在制作一个相机应用程序,它同时拍摄前置摄像头和后置摄像头图像/视频,我不希望每个文件的相机预览上都有单独的缩略图。
我想使用“文件”应用程序打开“/storage/emulated/0/DCIM/Camera”文件夹并进一步打开 ACTION_GET_CONTENT 无法使用的照片/视频,因为它选择图像并退出文件应用程序,如此处尝试 -
val intent = Intent(Intent.ACTION_GET_CONTENT)
val uri: Uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).path.toString() + "/Camera")
intent.setDataAndType(uri, "*/*")
startActivity(Intent.createChooser(intent, "Open folder"))
我也尝试了 ACTION_VIEW,但它并不特定于一个文件夹,并打开显示所有媒体的画廊,如此处尝试 -
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.type = "image/*"
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
“image/*” 对我来说也在图库中显示图像和视频,这很好。当使用“*/*”时,我们也可以使用“文件”应用程序,但它会打开下载文件夹。我发现的一种解决方案仅适用于此处尝试的 ES Explorer -
val uri: Uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).path.toString() + "/Camera")
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(uri, "resource/folder")
startActivity(intent)
这是由于不支持“资源/文件夹”导致崩溃。将“资源/文件夹”更改为“*/*”会使“文件”应用程序打开下载文件夹和“照片”应用程序挂起。
似乎画廊可以通过buckets做到这一点,但它也不是通用的。
我的要求不高,只是为了显示我的相机文件夹,我可以从中打开和查看任何照片/视频。
解决方案
如果用户没有使用 ACTION_GET_CONTENT 选择一个文件,这是不可能的。
但现在......试试这个代码:
String scheme = "content://com.android.externalstorage.documents/document/primary%3APictures";
// String scheme = "content://com.android.externalstorage.documents/document/primary%3ADCIM%2FCamera";
Uri uri = Uri.parse(scheme);
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri); // Added in API level 26
startActivityForResult(intent, 12345);
Toast.makeText(context, "Picker opened in:\n\n" + uri.toString(), Toast.LENGTH_LONG).show();
它在这里工作,我很惊讶。
推荐阅读
- python-3.x - 如何在烧瓶单元测试的发布请求中传递 html 表单?
- qt - 在 GridView 中的委托顶部绘制突出显示组件
- sqoop - Sqoop import failed "java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils"
- c++ - 您无权写入文件“ostream”所在的文件夹
- javascript - How can I prevent jQuery slideUp until form is filled?
- python - Packaging Python script for use by other users
- swift - 如何在 Swift 中解码结构的枚举
- flutter - Flutter:如何在子小部件的构建上下文之外的函数中访问“提供者”值?
- javascript - Script based Dependent Drop-Down List not working (Sheets)
- reactjs - pass variable from function to function in react js