如何从Drive应用程序数据文件夹中读取?

时间:2013-04-17 08:58:05

标签: android file google-api google-drive-api

这是this question的后续行动。我已将数据文件写入Drive应用程序文件夹,现在创建这些文件的应用程序需要检索它们。

这不起作用(我得到文件列表,但文件下载请求返回401错误):

private ArrayList<File> listFilesInApplicationDataFolder(Drive service) throws IOException {
  ArrayList<File> result = new ArrayList<File>();
Files.List request = service.files().list();
request.setQ("'appdata' in parents");

do {
  try {
    FileList files = request.execute();

    result.addAll(files.getItems());
    request.setPageToken(files.getNextPageToken());
  } catch (IOException e) {
    System.out.println("An error occurred: " + e);
    request.setPageToken(null);
  }
} while (request.getPageToken() != null &&
         request.getPageToken().length() > 0);

for (File file:result){
    System.out.println("##### "+file.getOriginalFilename()+ " "+file.toPrettyString());


    if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
          try {
            HttpResponse resp =
                service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl()))
                    .execute();
            InputStream in= resp.getContent();
            FileOutputStream fos = openFileOutput("pinmemo",
                    Context.MODE_PRIVATE);
            while(in.available()>0)
                fos.write(in.read());
            fos.close();
          } catch (UserRecoverableAuthIOException e) {
              startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
              return null;
          } catch (IOException e) {
            // An error occurred.
            e.printStackTrace();
            return null;
          }
        } else {
          // The file doesn't have any content stored on Drive.
          return null;
        }


}

return result;

}

我该怎么办?

编辑:

我收到此错误消息:

04-17 11:19:30.614: W/System.err(2022): com.google.api.client.http.HttpResponseException: 401 Unauthorized
04-17 11:19:30.614: W/System.err(2022): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1095)
编辑:新的谷歌游戏服务基本上满足了我的需求(唯一的问题是我的应用程序不是游戏......),因此这个问题现在已经过时了。当然,谷歌玩游戏使用“云保存”而不是“驱动器”,但对于我的需求来说,这是足够的。但是,我应该将Google游戏用于非游戏应用吗?

1 个答案:

答案 0 :(得分:0)

确保您的访问令牌拥有appdata范围的权限:

https://www.googleapis.com/auth/drive.appdata