如何在Android中使用Intent让用户仅选择本地文件?

3

我需要让用户从他们的本地存储中选择一个文件来使用我的应用程序。现在我正在使用INTENT.ACTION_GET_CONTENT来让用户选择文件,但它也提供了从云端选择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);
}
3个回答

7
请尝试使用Intent.EXTRA_LOCAL_ONLY,例如:
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
如果您的设备上的相册应用支持它,则仅显示本地存储中的文件。如果相册应用不支持上述意图,则可以在检查来自相册应用的返回文件路径的文件长度后向用户显示错误消息。


2

试试这个

 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);

xlsx和csv文件属于应用程序吗?我正在从Excel文件、CSV文件等导入数据集。 - ColonD

1

尝试这个仅打开csv和xlsx文件,它将仅选择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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接