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

Android如何跨应用获取其他应用生成的文件,空指针报错如何解决

问题根因

你遇到的空指针异常是directory.listFiles()返回null导致的,本质是Android系统的分区存储限制:从Android 10(API 29)开始,普通应用默认无法访问其他应用在/storage/emulated/0/Android/data/下的私有目录,你当前配置的普通存储权限、FileProvider都无法突破该限制(FileProvider仅用于你的应用向其他应用共享自有文件,对读取其他应用私有目录无效)。

解决方案

适配不同安卓版本

1. Android 6.0-Android 9(API 23-28)

  • 除Manifest中声明读写权限外,需要在代码中动态申请存储权限,用户授权后才可访问其他应用的公开目录。
  • 代码访问前增加判空逻辑,避免目录不存在时触发崩溃,优化后的代码参考:
public ArrayList<String> FetchImages() {
    ArrayList<String> filenames = new ArrayList<>();
    String path =  "/storage/emulated/0/Android/data/abc/files/";
    File directory = new File(path);
    // 先校验目录合法性
    if (directory.exists() && directory.isDirectory() && directory.canRead()) {
        File[] files = directory.listFiles();
        // 判空避免空指针
        if (files != null) {
            for (File file : files) {
                filenames.add(file.getAbsolutePath());
            }
        }
    }
    return filenames;
}

2. Android 10(API 29)

  • 在xyz应用的AndroidManifest.xml的<application>节点添加属性,临时关闭分区存储,使用旧版权限逻辑:
<application
    ...
    android:requestLegacyExternalStorage="true">
    ...
</application>
  • 配合动态申请的读写权限即可访问目标目录,同时保留上面的判空逻辑。

3. Android 11及以上(API 30+)

普通存储权限已无法访问其他应用的Android/data目录,需要申请特殊的所有文件访问权限:

  1. 在AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
  1. 代码中引导用户手动开启权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (!Environment.isExternalStorageManager()) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, 1001);
    }
}

注意:如果要上架谷歌应用商店,使用MANAGE_EXTERNAL_STORAGE权限需要向谷歌提交用途说明,不符合政策会被拒审。

更合规的替代方案(如果你同时开发abc和xyz两个应用)

不需要申请高危存储权限,两种实现方式:

  • 两个应用配置相同的android:sharedUserId,并且使用相同签名打包,即可直接互相访问私有目录;
  • 在abc应用中配置FileProvider,将自身的files目录共享给指定包名的xyz应用,通过ContentResolver访问文件。

内容的提问来源于stack exchange,提问作者Shivendra Kr. Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:15:05