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

时间:2017-09-15 08:44:48

标签: android android-intent uri android-file

我需要让用户从我们的应用程序的本地存储中选择一个文件。现在我正在使用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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

试试这个

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

您还可以使用类似以下代码的

类型的数组
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);

答案 2 :(得分:0)

试试这个只打开 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);