【问题标题】:Unable to open android's root folder无法打开android的根文件夹
【发布时间】:2021-02-27 22:20:34
【问题描述】:

我想做一个资源管理器应用。举个粗略的例子,我有一个简单的文件管理器应用程序,它显示了我手机的文件系统:

当我通过 USB 插入手机时,我从计算机的文件资源管理器中得到了相同的结果:

所以我在我的 AndroidManifest.xml 文件中添加了一些权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

当然,我确保向用户询问权限(虽然我不确定我是否应该请求 Manifest.permission.WRITE_EXTERNAL_STORAGE 权限,但我也希望能够写,但是授权弹出窗口没有提到读/写,它只是要求访问存储):

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), STORAGE_PERMISSION_CODE)
}

但后来我试图获取根文件夹的内容,屏幕截图上的那个,我试图用这种方式打开一些:

Environment.getDataDirectory().listFiles() // Is null
Environment.getRootDirectory().listFiles() // Isn't the correct folder
Environment.getExternalStorageDirectory().listFiles() // Null
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).listFiles() // Null

我已经尝试了在这个 gist (https://gist.github.com/lopspower/76421751b21594c69eb2) 上找到的几乎所有有趣的路径,但它们都没有给我想要的东西......

【问题讨论】:

  • 我很抱歉,但您的问题到底是什么?你想访问根文件夹吗?
  • Environment.getExternalStorageDirectory() 是正确的位置。请记住,you need to modify your manifest to gain read access to that directory on Android 10+ 除了您已经设置的权限位。
  • @MouaadAbdelghafourAITALI 我正在尝试在代码中获取与屏幕截图相同的文件列表
  • @CommonsWare 就是这样,非常感谢!但是,如果我正确理解这是遗留系统,那么获得相同结果的正确方法是什么?我也尝试过使用 Context 对象,但没有结果...
  • @MarkKeen 非常感谢,我会看的,这个系统很头疼

标签: android permissions


【解决方案1】:

尝试以下方法:

 String path = Environment.getExternalStorageDirectory().getAbsolutePath();
            File[] files = new File(path).listFiles();
            if (files != null && files.length > 0) {
                for (File file : files) {
                    Log.d("FILE", "--> "+file.getName());
                }
            }

确保授予了存储权限,并将此行添加到您的清单中:App 标记内的android:requestLegacyExternalStorage="true"

Logcat:

2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Android
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> MIUI
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> dctp
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> did
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Movies
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> DCIM
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Pictures
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Download
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> WhatsApp
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> ClassicGames
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> .wallpaperboard
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> com.facebook.katana
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> FileExplorer
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> logger
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> .turing.dat
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> MicTest
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Telegram
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> IMG_20210206_210449.jpg
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> voip-data
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> Music
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> CamScanner
2021-02-27 23:55:35.470 3285-3285/maa.abc D/FILE: --> .BackgroundChange

【讨论】:

  • 请求旧版外部仅适用于 Android 10。
猜你喜欢
  • 2017-03-12
  • 2018-12-31
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多