首页 > 解决方案 > 如何从意图打开默认文件应用程序中的 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做到这一点,但它也不是通用的。

我的要求不高,只是为了显示我的相机文件夹,我可以从中打开和查看任何照片/视频。

标签: androidfileandroid-intentcameragallery

解决方案


如果用户没有使用 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();

它在这里工作,我很惊讶。


推荐阅读