标签: android-storage

listFiles() 在 /storage/emulated 上返回 null,而 /storage/emulated/0 存在

我正在 android 27 模拟器上进行测试并尝试遍历一些目录。

当我尝试遍历/storage/emulated目录时,该方法会在存在时listFiles()返回。null/storage/emulated/0

这是一个测试代码:

File emuDir = new File("/storage/emulated");
File[] emuDirFiles = emuDir.listFiles(); // returns null.

File exStorageDir = new File("/storage/emulated/0")
exStorageDir.exists(); // returns true
Run Code Online (Sandbox Code Playgroud)

PS我已经在清单中添加了适当的存储权限并授予了运行时权限。

java android file-permissions android-6.0-marshmallow android-storage

3
推荐指数
1
解决办法
2036
查看次数

无法访问 Android Q 中的存储

尽管具有读写权限,但我无法在 Android 10 中访问 sdcard。这是我列出所有目录的方法。

        File root = new File("/mnt/sdcard/");

        File[] subFiles = root.listFiles();

        for(File file : subFiles)    {
            if(file.isDirectory())  {
                String str = text.getText().toString() + "\n";
                str+=file.getAbsolutePath();
                text.setText(str);
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果我使用/mnt/而不是/mnt/sdcard/我可以看到sdcard目录列在那里,但是当我使用时/mnt/sdcard/subFilesnull. 我不知道这是关于新的 android 10 版本还是模拟器的问题。我正在使用 android studio 的默认模拟器进行调试。

android android-permissions android-storage

3
推荐指数
1
解决办法
4805
查看次数

即使授予了权限,checkSelfPermission 也会返回 false

所以我已经在这里坐了 4 个小时,我一直在挠头,为什么我的 2 个设备行为不端。问题是,即使授予了权限,checkSelfPermission 也会返回 false!我 100% 确定这不应该发生,因为它在 5-6 天前按预期工作。这是我用来检查是否授予权限的代码。

public boolean isStoragePermissionGranted() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v("BaseActivity", "Permission is granted");
                return true;
            } else {
                Log.v("BaseActivity", "Storage Permission is revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
                return false;
            }
        } else { //permission is automatically granted on sdk<23 upon installation
            Log.v("BaseActivity", "Permission is granted");
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,每当我第一次打开BaseActivity具有此代码的活动 ( ) 时,它都会按预期工作并请求用户获得存储权限。但是,在此活动中的片段中,我想在其中访问文件,每当我调用此方法时,它都开始返回 false。我已经公开了这个方法,它曾经根据情况返回真/假。这是我检查 Fragment 中是否授予权限的方法。

if (!((BaseActivity) getActivity()).isStoragePermissionGranted()) {
                        Toast.makeText(getActivity(), …
Run Code Online (Sandbox Code Playgroud)

android android-storage

3
推荐指数
1
解决办法
586
查看次数

我是否需要在Android 4.1及更早版本上明确声明WRITE_EXTERNAL_STORAGE权限?

关于WRITE_EXTERNAL_STORAGE,Android文档说明了这一点

从API级别19开始,读取/写入getExternalFilesDir(String)和getExternalCacheDir()返回的特定于应用程序的目录中的文件不需要此权限.

我的应用程序只读取和写入Android/data //文件目录.这是否意味着,为了在我的应用程序在早于19的Android版本上运行时读取和写入此特定目录,我仍然需要在清单中声明此权限?

android android-version android-permissions android-storage

2
推荐指数
1
解决办法
331
查看次数