mkdir () или mkdirs () не работают на Android API 26 - PullRequest
0 голосов
/ 24 мая 2018

Следующий код работает с другими API, но 26

public static boolean cretaeDir()
{
    String dir = Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED).getAbsolutePath();
    java.io.File folder = new java.io.File(dir + "/SomeFolderName");
    if (!folder.exists()) {
        try{
            if(folder.mkdir()) {
                Log.e("Creating Folder", "Success");
                return true;
            } else {
                Log.e("Creating Folder", "Failed");
                return false;
            }
        } catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }else{
        return true;
    }
}

Прежде чем кто-то спросит, да, разрешения были предоставлены, а также разрешение на использование присутствует в Манифестефайл.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.name">


<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.android.vending.BILLING" />


<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />


<application/>

Тестовое устройство - Samsung S8, работает 8.0.0

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

попробуйте

File fsd = Environment.getExternalStorageDirectory();
String filePath = fsd.getAbsolutePath() + "/SomeFolderName";

File dir = new File(filePath);
if(dir.isDirectory==false || !dir.exists()){
    dir.mkdirs();
}
0 голосов
/ 24 мая 2018

Я исправил это следующим образом, поскольку у меня не осталось другого варианта, и я попробовал все предложенные решения.Возможно, ошибка зависит от устройства или что-то в этом роде, но это не имеет ничего общего с API 26, поскольку я обновил одно из моих тестовых устройств до API 26, и старая функция сработала.

Следующий код работает на всех устройствах.

 File file = MyApplication.getInstance().getDir("BUZZ",MODE_PRIVATE);
 cacheDir = new File(file.getAbsoluteFile()+File.separator+IMAGE_DIRECTORY_NAME);

Happy Coding: -)

0 голосов
/ 24 мая 2018

Вы не используете правильный тип папки.Вы должны выбрать один из следующих параметров

Тип возвращаемого каталога хранения.Должно быть одним из следующих: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTIR_ECT_DOC. DIRECTORY_ECTS илиНе может быть нулевым.

Ваш код должен быть примерно таким:

String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
...