Внутреннее хранилище: почему getFilesDir () дает мне не ту папку? - PullRequest
0 голосов
/ 15 июня 2019

Я занимаюсь разработкой приложения для Android.Я хочу загружать файлы из Firebase Storage во внутреннее хранилище и впоследствии воспроизводить их (аудиофайлы).Я использую getFilesDir () для достижения этой цели.

На эмуляторе все отлично работает.Мой аудио каталог находится по адресу

/ data / user / 0 / com.package.name / files / audio /

Проблема возникает на некоторых Huaweiустройства (телефон и планшет) с Android API 28.

Я получаю сообщение об ошибке, что моя аудиопапка не может быть найдена в указанном выше месте и с файлом устройстваexplorer Я ясно вижу, что папка data / user / отсутствует, но вместо этого система по-прежнему использует старые каталоги / data / data / com.package.name / .

Итак, мой вопрос:

Кто-то есть идея, почему getFilesDir () не дает мне правильный путь и как я могу исправитьэто без жесткого кодирования пути.

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

    String filename = document.getId() + ".m4a";
    String rootPath = getFilesDir().getAbsolutePath();
    File root = new File(rootPath);

//not working
    if(!root.exists()){
        rootPath = "/data/data/" + getPackageName() + File.separator + "files"
                + File.separator + "voice" + File.separator;
    }
//

    String folderPath = rootPath + File.separator + "voice" + File.separator;
    File subFolder = new File(folderPath);

    if(!subFolder.exists()){
        subFolder.mkdir();
    }

    final File localFile = new File(subFolder, filename);
    final StorageReference voiceRef = uploadsRef.child("voice").child(filename);
    voiceRef.getFile(localFile);

1 Ответ

2 голосов
/ 16 июня 2019

getFilesDir() может и действительно возвращает разные абсолютные пути в зависимости от того, на каком устройстве вы работаете, или даже на том, какой пользователь (для устройств, поддерживающих несколько пользователей) запускает ваше приложение (это user/0, который вы видите).

Пока вы работаете с каталогом, возвращаемым getFilesDir() или его подкаталогами (например, каталогом new File(getFilesDir(), "voice")), все будет работать на каждом устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...