Невозможно получить файлы и папки с Google Диска с помощью нового Drive API.

Я пытаюсь получить список файлов в папке с Google Диска из своего приложения для Android, но пока безуспешно. Я использую google-api-drive-v1-rev4-java-1.6.0-beta и google-api-client-1.9.0. Я также создаю свой код, похожий на calendar-android-sample и tasks-android-sample из примеров по адресу http://code.google.com/p/google-api-java-client/wiki./Android.

Кажется, я не могу найти, как использовать files (), чтобы получить список папок или даже идентификатор папки, которую я хочу. В tasks-android-sample используется @default в методе get () для получения списка задач. Что бы я использовал в методе get, чтобы сначала получить список папок, найти мою папку, получить идентификатор, а затем получить список файлов в этой папке?

AsyncLoadDocs.java: (Примечание: я использую getFields () только для того, чтобы увидеть, содержит ли объект Get какие-либо метаданные, которых на данный момент нет.)

package com.mysite.myapp.docs;

import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.Drive.Files.Get;
import com.google.api.services.drive.model.File;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ArrayAdapter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Asynchronously load the docs with a progress dialog.
 *
 * @author ms
 */
class AsyncLoadDocs extends AsyncTask<Void, Void, List<String>> {

private static final String TAG = "AsyncLoadDocs";
private final GDocsSync gDocsSync;
private final ProgressDialog dialog;
private final Drive entry = null;
private com.google.api.services.drive.Drive service;

  AsyncLoadDocs(GDocsSync gDocsSync) {
    this.gDocsSync = gDocsSync;
    service = gDocsSync.driveClient;
    dialog = new ProgressDialog(gDocsSync);
  }

  @Override
  protected void onPreExecute() {
    dialog.setMessage("Loading docs...");
    dialog.show();
  }

  @Override
  protected List<String> doInBackground(Void... arg0) {
    try {
      List<String> folderNames = new ArrayList<String>();

      Get get = service.files().get("@default").setProjection("FULL");
      String fields = get.getFields();
      Log.d(TAG, "Fields: " + fields);

      return folderNames;
    } catch (IOException e) {
        gDocsSync.handleGoogleException(e);
      return Collections.singletonList(e.getMessage());
    } finally {
        gDocsSync.onRequestCompleted();
    }
  }

  @Override
  protected void onPostExecute(List<String> result) {
    dialog.dismiss();
  }
}

Любая помощь будет оценена. Образцы календаря и задач успешно извлекают данные из Google с помощью моего ключа API. Почему этот код Диска не работает?


person phoeniix    schedule 07.06.2012    source источник


Ответы (1)


Drive API предоставляет доступ только к двум классам файлов:

  • Файлы, созданные пользователем с помощью определенного приложения Диска.
  • Файлы, которые пользователь открывает в определенном приложении Диска.

По соображениям безопасности нет способа перечислить все файлы в учетной записи пользователя на Диске:

https://developers.google.com/drive/apps_overview#granting_file-level_access

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

person Claudio Cherubino    schedule 12.06.2012
comment
Спасибо, Клаудио, в этом есть смысл. Для моих целей мне не нужен доступ ко всем файлам, только к моей папке. Думаю, мне нужно создать папку с моим приложением, а затем получить к ней доступ. Тем временем я начал реализовывать интеграцию, используя docs api. У меня возникают проблемы, когда я возвращаю type / html вместо xml, и мне нужно выяснить, что там происходит. Я планирую посетить вашу сессию (developers.google.com/events/io/ sessions / gooio2012 / 705) о том, как интегрировать Диск с Android в Google IO, и, может быть, тогда мы сможем поболтать? - person phoeniix; 26.06.2012