如何在安卓应用中打开PDF、PPTX、DOCX、XLSX等格式的文档
问题原因
你当前的代码只指定了Intent的泛型type为*/*,但没有把你定义的目标MIME类型数组传递给系统文件选择器,因此过滤规则没有生效,无法限定可选文件范围。
修复方案
补充Intent.EXTRA_MIME_TYPES参数传递你定义的MIME类型数组即可,修改后的完整代码如下:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); String[] mimeTypes = { "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx "application/pdf", "application/zip" }; intent.addCategory(Intent.CATEGORY_OPENABLE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 安卓4.4及以上支持多MIME类型配置 intent.setType("*/*"); intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes); } else { // 低版本安卓只支持单MIME类型,可按业务需要选择拼接常用类型或直接用*/* StringBuilder mimeTypesStr = new StringBuilder(); for (String mimeType : mimeTypes) { mimeTypesStr.append(mimeType).append("|"); } intent.setType(mimeTypesStr.substring(0, mimeTypesStr.length() - 1)); } resultLauncher.launch(intent);
额外注意事项
- 如果你希望调用系统的存储访问框架(SAF)获得更稳定的文件访问能力,可将
Intent.ACTION_GET_CONTENT替换为Intent.ACTION_OPEN_DOCUMENT,适配逻辑和上述代码一致。 - 部分第三方文件管理器可能不支持多MIME类型过滤,如果出现过滤失效的情况,建议在拿到文件返回结果后额外做一次文件格式校验,避免不符合要求的文件被选中。
内容的提问来源于stack exchange,提问作者TOGIY
相关产品推荐
相关产品推荐

