Как получить ссылки на все PDF-файлы со съемного хранилища (SD-карты) Android на Java?

#java #android #android-sdcard

#java #Android #android-sdcard

Вопрос:

Я не могу получить файлы PDF со съемного хранилища (SD-карты).

Я успешно извлек все ссылки на PDF-файлы во внешнем хранилище, используя следующий метод

     public String findBooks() {

        String pdf = ".pdf";
        String epub = ".epub";

        File dir = Environment.getExternalStorageDirectory();
        Queue<File> toVisit = new PriorityQueue<>(); 
        toVisit.add(dir);
        String pdfs = "";
        int pdfCount = 0;

        if (toVisit.size() != 0) {
          while(true){
              File file = toVisit.remove();
              File[] tmpList = file.listFiles();
              int i;
              for(i = 0; i < tmpList.length; i  ){
                if (tmpList[i].isDirectory()) {
                    toVisit.add(tmpList[i]);
                } 
                else if (tmpList[i].getName().endsWith(pdf) || tmpList[i].getName().endsWith(epub) ){
                    pdfs  = tmpList[i].toString()   ",";
                    pdfCount  = 1;
                }
              }

              if(toVisit.size() == 0){
                Toast.makeText(getReactApplicationContext(), "End of search: "  String.valueOf(pdfCount), 0).show();
                break;
              }
          }
        }

      return pdfs;
    }
  

Комментарии:

1. Для получения пути к съемной карте Micro sd посмотрите на второй элемент, возвращенный getExternalFilesDirs() . Остальная часть вашего кода может остаться прежней.

Ответ №1:

Я успешно извлек все ссылки на PDF-файлы на внешней SD-карте, используя следующий метод

Этот код работает с внешним хранилищем, а не со съемным хранилищем.

Я думаю, я должен иметь возможность использовать тот же метод для извлечения PDF-файлов из внутреннего хранилища

Нет, потому что у вас нет доступа к внутреннему хранилищу, кроме каталогов, выделенных специально для вашего приложения (например, getFilesDir() on Context ).

Комментарии:

1. @peter Это было очень проясняющим! Большое вам спасибо. Но тогда как мне получить доступ к PDF-файлам на съемном хранилище

2. @CodeNinja: Вы этого не делаете, особенно в более новых версиях Android. Используйте ACTION_OPEN_DOCUMENT и позвольте пользователю выбирать PDF из доступных для пользователя локальных и облачных хранилищ.