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

Android如何通过Intent Filter接收PDF文件?默认文件管理器打开崩溃怎么解决

崩溃根因
  • 空指针触发直接原因:系统默认文件管理器通过ACTION_VIEW启动你的应用时,Intent未携带Extras数据,intent.getExtras()返回null,你未做空判断直接调用bundle.get()方法触发异常。
  • 逻辑错误:ACTION_VIEW类型的意图传递文件URI时,默认将URI存放在Intent的data字段,而非EXTRA_STREAM字段。EXTRA_STREAM仅用于ACTION_SEND/ACTION_SEND_MULTIPLE类分享场景,不是你当前场景的传参方式。
修复代码

替换你原有接收Intent的代码为如下版本,兼容所有打开场景,同时增加全链路空判断:

Intent intent = getIntent();
Uri pdfUri = null;

// 优先处理VIEW动作的data字段(文件管理器、浏览器等打开场景)
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    pdfUri = intent.getData();
} 
// 兼容第三方应用分享PDF的场景
else {
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        pdfUri = (Uri) bundle.get(Intent.EXTRA_STREAM);
    }
}

// 非空校验后再执行加载逻辑
if (pdfUri != null) {
    // 此处放置你原本的PDF加载逻辑
} else {
    // 异常处理,可弹出Toast提示用户无法获取文件
}
可选优化项
  • Manifest配置可简化:你当前写的三个intent-filter中,第一个匹配application/pdf mime类型的配置已经覆盖了所有scheme(包括content、file、http、https等),剩余两个冗余的scheme匹配配置可以直接删除,减少兼容问题。
  • 如果需要加载http/https的在线PDF,记得在Manifest中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者Syed Irfan Hussaini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:54:02