如何让用户 select 仅使用 Android 中的 Intent 本地文件?

How to let user select only local files using Intent in Android?

我需要让用户 select 从他们的本地存储中为我的应用程序提供一个文件。现在我正在使用 INTENT.ACTION_GET_CONTENT 让用户 select 文件,但它也提供了从云端 selecting URI 的选项。获得 URI 文件后,我将其视为本地文件并执行各种操作(包括提取文件扩展名)。如何让用户只选择本地文件?

else if(menuItem.getItemId() == R.id.action_import_from_file){
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);
}

试试这个

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
 intent.setType("image/*");
 intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
 startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);

尝试使用 setType() 方法并指定用户选择的文件类型

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("application/pdf|application/x-excel|text/csv");
startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);

您还可以像下面的代码那样使用 MIME 类型数组

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
String[] types = {"application/x-excel/*", "application/csv/*",};
i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_SELECT_FILE_FOR_IMPORT);

请尝试像
一样使用 Intent.EXTRA_LOCAL_ONLY intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
如果您设备中的图库应用程序支持它,则只会显示本地存储中的文件。如果图库应用不支持上述意图,您可以在检查图库应用返回的文件路径的文件长度后向用户显示错误消息。

仅对打开的 csv 和 xlsx 文件尝试此操作 它将 select 只有 csv 和 xlsx 文件

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    String[] mimetypes = {"application/vnd.openxmlformats- 
    officedocument.spreadsheetml.sheet", "text/csv"}; 
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
    startActivityForResult(intent, READ_REQUEST_CODE);