Как правильно определить каталог хранения файлов AnkiDroid (или любого другого внешнего приложения) из моего приложения? - PullRequest
0 голосов
/ 03 декабря 2018

Я использую API AnkiDroid для создания и отправки карт в приложение AnkiDroid (https://github.com/ankidroid/Anki-Android/wiki/AnkiDroid-API). Но есть одна проблема, связанная с отправкой медиа-файлов через API. Они хранятся во внешнем хранилище "/ storage / emulated / 0/ AnkiDroid "в моем случае. Я могу добавлять и читать файлы оттуда, но я думаю, что этот путь может быть другим для других устройств или в случае, если я переключаюсь на SD-карту. Вопрос: как правильно определить путь к каталогу внешнего хранилища приложения

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Внимание жесткий код !!!Я понимаю, что это не лучший способ.но это работает для меня.

public ArrayList getExternalFolderPath(String folderName){

    ArrayList<String> arrayList = new ArrayList<>();

    //get all storages in phone
    File externalStorages[] = getExternalFilesDirs(null);

    for (File es: externalStorages){
        String exF = es.toString();

        //cut out what don't need
        exF = exF.split("/Android/data")[0];

        File file = new File(exF);
        File[] files = file.listFiles();
        for (File f: files){
            Log.i(TAG, "getAnkiExternalFolder()" + f.toString());
            //add in array the path
            if(f.toString().contains(folderName)){
                arrayList.add(f.toString());
            }
        }
    }
    return arrayList;
}

также необходимо добавить запись манифеста.

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

и запросить у пользователя доступ для чтения, если уровень API повышен до 23: https://developer.android.com/training/permissions/requesting

0 голосов
/ 04 декабря 2018

Экс-сопровождающий проекта AnkiDroid здесь.

Ваш путь - путь по умолчанию к медиа-файлам AnkiDroid.

Пользователи AnkiDroid могут изменить этот путь через конфигурацию, как вы, вероятно, знаете:

enter image description here

Этот параметр хранится с использованием обычной технологии хранения настроек Android, которая по соображениям безопасности недоступна для других приложений.

Я не думаю, что свойство в настоящее время доступно другим приложениям ( исходный код ), но это допустимый вариант использования, поэтому, пожалуйста, создайте новую проблему на https://github.com/ankidroid/Anki-Android/issues

Между тем, и для совместимости с текущей и предыдущими версиями AnkiDroid, я бы сказал, у вас есть два варианта:

  • Сканирование SD-карты в поисках вызываемого collection.media.Эта папка находится внутри папки AnkiDroid, и ее имя не может быть изменено, по договоренности.Если вы найдете несколько, сравните даты последнего изменения и спросите пользователя.
  • Настройте параметры, аналогичные приведенным на скриншоте выше.Пользователи, которые хотят использовать папку не по умолчанию, должны будут настроить ее в обоих приложениях, что немного неудобно, но не такая уж сумасшедшая вещь, которую нужно просить.
...