Как получить внутренний и внешний (sdcard) путь с getExternalFilesDirs? - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь получить пути к моему внутреннему хранилищу и моему внешнему хранилищу (съемная SD-карта).

Я попробовал вот что:

Внутренний путь

path = getActivity().getExternalFilesDirs(null)[0].getAbsolutePath();

Внешний путь

path = getActivity().getExternalFilesDirs(null)[1].getAbsolutePath();

Logcat

Внутренний путь возвращает:

/storage/emulated/0/Android/data/com.package./files

И с помощью SubString Мне удалось перейти по этому пути

/storage/emulated/0/

Код подстроки

int index = path.lastIndexOf("/Android/data/");
if (index > 0){
path =  path.substring(0, index);
Log.d(TAG, "value path0: " + path);
}

Для внешнего пути я проделал то же самое с SubString , и он возвращает

/storage/3EC7-2342

Теперь я не уверен, что этохорошо для жесткого кодирования String "/ Android / data /" , потому что я не уверен, что у всех устройств есть эта строка в их пути, и она может работать на моем устройстве, но, возможно, не на других.

Любой другой способ получить Абсолютный путь из внутреннего и внешнего хранилища (sdcard) ?

getActivity().getExternalFilesDirs(null)[0].getAbsolutePath();

путь Logcatзначение, когда я использую код выше.

/storage/emulated/0/Android/data/com.package./files

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

1 Ответ

0 голосов
/ 10 марта 2019

Полагаю, вам не нужен код подстроки. Вы можете использовать это. как указано выше, это относится к внешнему пути.

File file1 =  getApplicationContext().getExternalFilesDirs(null)[1];
    while(!file1.getParentFile().getAbsolutePath().equals("/storage")) {

        file1 = file1.getParentFile();
        System.out.println(file1.getAbsolutePath());
    }

Вы можете использовать аналогично для внутреннего пути.

Если подумать, если в будущем «хранилище» также изменится, следующий код должен работать.

String path = null;
    File file1 =  getApplicationContext().getExternalFilesDirs(null)[1];
    while(!file1.getParentFile().getAbsolutePath().equals("/")) {

        file1 = file1.getParentFile();
        path = file1.getAbsolutePath();
        //System.out.println(file1.getAbsolutePath());
    }
    file1 =  getApplicationContext().getExternalFilesDirs(null)[1];
    while(!file1.getParentFile().getAbsolutePath().equals(path)) {

        file1 = file1.getParentFile();
        System.out.println(file1.getAbsolutePath());
    }
...