You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用Android文件管理器打开手机存储并筛选选择PDF文件?

问题描述

我想要打开手机存储路径storage/emulated/0/(注:原路径写法有误,正确格式为该路径),并仅筛选出pdf文件供用户选择。
我尝试了如下代码,但fileChooser中只能使用DropBox、GoogleDrive等第三方应用打开。请问如何通过Android Explorer打开?

addPDF.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
        intent.setType("application/pdf"); 
        startActivityForResult(intent,PICK_PDF_REQUEST); 
    } 
});

补充说明:我在Android 4.2和6.0系统上都进行了尝试,但filechooser中仍只有Drive和Dropbox选项。


解决方案

嘿,这个问题我帮不少开发者解决过!你的代码核心问题是没给系统足够的提示,让它优先唤起本地文件管理器,反而默认显示了云存储类应用。下面是适配Android 4.2和6.0的具体调整方案:

方案1:添加本地文件限制+强制显示应用选择器

给Intent加上EXTRA_LOCAL_ONLY参数明确要求本地文件,再用createChooser强制弹出所有符合条件的应用列表,这样系统文件管理器就会出现在选项里:

addPDF.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
        intent.setType("application/pdf");
        // 明确告知系统只需要本地存储的文件
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
        // 强制弹出应用选择器,避免默认直接打开云应用
        startActivityForResult(Intent.createChooser(intent, "选择PDF文件"), PICK_PDF_REQUEST); 
    } 
});

方案2:针对Android 4.4+(含6.0)使用ACTION_OPEN_DOCUMENT

ACTION_OPEN_DOCUMENT是Android 4.4引入的专门用于文档选择的Action,系统文件管理器对它的支持更友好,搭配CATEGORY_OPENABLE和EXTRA_LOCAL_ONLY效果更好:

addPDF.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
        intent.setType("application/pdf");
        // 限定可打开的文件类型
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        // 仅本地文件
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
        startActivityForResult(Intent.createChooser(intent, "选择PDF文件"), PICK_PDF_REQUEST); 
    } 
});

方案3:Android 4.2专属路径指定

Android 4.2的系统文件管理器可能需要明确指定初始打开路径,你可以直接指向内置存储根目录:

addPDF.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
        // 内置存储根目录的正确Uri
        Uri storageRootUri = Uri.parse("file:///storage/emulated/0/");
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
        intent.setType("application/pdf");
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
        // 指定初始打开的路径
        intent.putExtra("android.intent.extra.INITIAL_URI", storageRootUri);
        startActivityForResult(Intent.createChooser(intent, "选择PDF文件"), PICK_PDF_REQUEST); 
    } 
});

额外注意事项

Android 6.0及以上需要动态申请READ_EXTERNAL_STORAGE权限,否则系统文件管理器可能无法正常读取存储内容,记得在代码中加入权限申请的逻辑哦!


内容的提问来源于stack exchange,提问作者frikh letissia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:06