Получить список файлов из определенной папки на гугл диске

Я использую SDK сервисов Google Play.

И попробовал демонстрации с сайта разработчика.

Есть ли способ получить (скачать) все файлы из определенной папки?

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


person user1537779    schedule 04.05.2014    source источник


Ответы (1)


Вот «ожидающая» версия метода, который делает что-то подобное (должен запускаться в потоке, отличном от пользовательского интерфейса).

//  list / search all non-trashed files in a folder (globally if 'fldr' is null) 
GoogleApiClient _gac;
public void findAll(String title, String mime, DriveFolder fldr) {
  ArrayList<Filter> fltrs = new ArrayList<Filter>();
  fltrs.add(Filters.eq(SearchableField.TRASHED, false));
  if (title != null)  
    fltrs.add(Filters.eq(SearchableField.TITLE, title));
  if (mime != null)  
    fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
  Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 
  MetadataBufferResult rslt = (fldr == null) ? Drive.DriveApi.query(_gac, qry).await() : 
                                               fldr.queryChildren(_gac, qry).await();
  if (rslt.getStatus().isSuccess()) {
    MetadataBuffer mdb = null;
    try { 
      mdb = rslt.getMetadataBuffer();
      if (mdb == null) return null;
      for (Metadata md : mdb) {
        if ((md == null) || (!md.isDataValid()) || md.isTrashed()) continue;
        // md gives you the file info    
      }
    } finally { if (mdb != null) mdb.close(); } 
  }
}

Надеюсь, это поможет, есть куча кода на ту же тему на Github здесь, но я уже давно его не трогал (т.е. никаких гарантий).

person seanpj    schedule 05.05.2014
comment
Я получаю сообщение об ошибке Фильтр не может быть преобразован в тип. Это Filters? - person user1537779; 05.05.2014
comment
Я не в сети, не могу проверить. Код был написан много лет назад для библиотеки версии 14 и работал. Но известно, что гуглеры тянут ковер под вас (нас). Извините, слишком далеко (где-то в ЕС), чтобы помочь прямо сейчас. Насколько я помню, с головы до ног, вероятно, существует метод «.list», который не работает с фильтрами. Grep код Github, может там что-то есть. - person seanpj; 05.05.2014
comment
Также есть класс GAC в другой области GitHub (github.com/ seanpjanson/140319-Accounts/blob/master/GAC.java), который делает много всего, вы можете что-то оттуда выкопать (вещи, которые я выкинул туда только для того, чтобы показать, какой дрянной код я умею писать :-) Наслаждаться. - person seanpj; 05.05.2014
comment
Ладно решил. Есть вопрос, приведенный выше код получает файлы, созданные только моим приложением. Любой другой файл, добавленный с помощью Интернета или других приложений, не отображается. Ожидается ли это? Как я могу получить все файлы (созданные и другими приложениями) из папки. - person user1537779; 05.05.2014
comment
Единственная область в GDAA (Google Drive Android Api) — это ФАЙЛ. В GDAA есть средство выбора файлов, которое может обойти это, но я мало что о нем знаю. Проверьте ответы Шерил Саймон на SO (stackoverflow.com/users/234039/cheryl-simon), чтобы узнать больше. - person seanpj; 05.05.2014
comment
В общем, в классе GAC (выше) я использую и GDAA, и RESful API (com.google.api.services.drive.Drive _drvSvc), так как в GDAA отсутствует много функций (миниатюры, удаление, полный текст, ...). Область DRIVE_FILE также можно заменить, смешав RESTful с GDAA. - person seanpj; 05.05.2014