ListFile является нулевым после обновления до Oreo - PullRequest
0 голосов
/ 29 июня 2018

Приложение не работает после моего обновления Mibox 4K для Android Oreo

Код поиска внешнего хранилища

    private String[] getUsbStoragePaths()
{
    List<String> result  = new ArrayList<>();
    File storageDir = new File("/storage");
    if(storageDir.isDirectory()) {
        File[] subDir = storageDir.listFiles();
        for(File dir : subDir) {
            if(dir.canRead()) {
                result.add(dir.getAbsolutePath());
            }
        }
    }

    return result.toArray(new String[0]);
}


private List<File> getSubDirs(String path) {
    List<File> result = new ArrayList<>();
    File root = new File(path);
    if (root.exists() && root.canRead()) {
        File[] subDirs = root.listFiles(); ->>>>>> alway null

        if (subDirs !=null)
        {
            for(File dir: subDirs)
            {
                if (dir.isDirectory() && dir.canRead())
                {
                    result.add(dir);
                }
            }
        }
    }

    return result;
}

В моем хранилище USB есть подпапка
Корень
---- SubDir1
---- SubDir2
---- SubDir3
---- Файл1

разрешение в приложении

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

и запросить разрешение во время выполнения

private void requestStoragePermission() {
    if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ||
        !hasPermission(, Manifest.permission.READ_EXTERNAL_STORAGE)) {
        ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }
}
    private boolean hasPermission(final String permission) {
        return PackageManager.PERMISSION_GRANTED == getApplicationContext().getPackageManager().checkPermission(
            permission, getApplicationContext().getPackageName());
    }   

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Other things
    requestStoragePermission();
}

Результат метода getSubDirs пуст, File [] subDirs = root.listFiles (); - >>>>>> всегда null

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Мое решение: Изменить цель с 25 на 26 Но не может поддерживать имя Unicode

0 голосов
/ 29 июня 2018
This code will give you files which are stored inside directory.

String pattern = ".png";    
File directory = new File(Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES), "Your directory name");
            File[] fileList = directory.listFiles();
            if (fileList != null && fileList.length > 0) {

                for (File file : fileList) {
                     //if you need particular file format than check with that otherwise remove it.
                    if (file.isFile() && file.getName().endsWith(pattern)) {
                       //
                    }
                }
             }
...