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

Android如何正确启动com.android.documentsui.files.FilesActivity?

问题原因

  • 包可见性权限缺失:Android 11(API 30)开始引入包可见性机制,默认应用无法直接访问未在清单中声明的应用,哪怕目标应用实际存在,也会被系统拦截返回ActivityNotFoundException。
  • 未匹配Activity的Intent过滤规则:FilesActivity本身配置了Intent过滤器,仅接收携带对应Action的请求,仅传入组件名的空Intent会被过滤规则拦截。

修复方案

  1. 若应用targetSdk ≥ 30,先在AndroidManifest.xml中添加包可见性声明:
<manifest ...>
    <!-- 新增包可见性声明 -->
    <queries>
        <package android:name="com.google.android.documentsui" />
        <!-- 兼容原生AOSP ROM可额外加下面这行 -->
        <package android:name="com.android.documentsui" />
    </queries>

    <application ...>
    ...
    </application>
</manifest>
  1. 调整启动代码,补充Intent对应Action与校验逻辑:
Intent intent = new Intent(Intent.ACTION_VIEW);
// 可根据实际ROM替换包名测试
ComponentName componentName = new ComponentName("com.google.android.documentsui", "com.android.documentsui.files.FilesActivity");
intent.setComponent(componentName);
intent.addCategory(Intent.CATEGORY_DEFAULT);

// 提前校验Intent有效性
if (intent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(intent);
} else {
    // 降级逻辑:启动通用系统文件选择器
    Intent fallback = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    context.startActivity(fallback);
}

补充说明:部分定制ROM可能会修改DocumentsUI的包名或组件导出属性,如果上述代码仍无法启动,可以执行adb shell dumpsys activity activities | grep FilesActivity确认当前设备上该Activity的真实包名与全类名再做调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:06:03