Google Drive API - Android - 如何获取驱动器文件ID?

时间:2014-11-24 15:23:00

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

我正在尝试开发一个可以读取存储在我的google驱动器文件夹中的xml文件的Android应用程序,首先想法是尝试打开文件并处理内容。

我已经阅读了Google Drive API docs for android并且我达到了一个我丢失的地步,它正在使用文件内容。

根据本指南,从驱动器打开文件的方法是:

DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`

搜索我意识到完整的代码(它们不包括在内):

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,DriveId.bg(id));
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`

问题是我不知道文件“id”。我已经尝试过谷歌驱动器的网络链接中的ID,类似这样(https://drive.google.com/open id = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso & authuser = 0)但是没有用。

4 个答案:

答案 0 :(得分:7)

您可以使用DriveAPI查询方法来检索有关特定文件的任何信息。您需要将查询对象定义如下:

Query query = new Query.Builder()
    .addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
    .build();

并设置一个回调函数来迭代结果:

Drive.DriveApi.query(googleApiClient, query)
        .setResultCallback(new OnChildrenRetrievedCallback() {

    @Override
    public void onChildrenRetrieved(MetadataBufferResult result) {
        // Iterate over the matching Metadata instances in mdResultSet
    }
});

您可以在此处找到有关此主题的更多信息:https://developers.google.com/drive/android/queries

答案 1 :(得分:3)

我发现此问题的解决方案是从应用程序创建文件。使用google drive api demo app中的类("CreateFileActivity.java")。

使用此类,我将新文件中的返回Driveid保存在全局DriveId变量中。

final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
        ResultCallback<DriveFolder.DriveFileResult>() {
            @Override
            public void onResult(DriveFolder.DriveFileResult result) {
                if (!result.getStatus().isSuccess()) {
                    Log.e("","Error while trying to create the file");
                    return;
                }
                Id=result.getDriveFile().getDriveId();
                Log.e("","Created a file with content: " + Id);

            }
        };

然后在另一种方法中使用此ID我调用该文件并将其读取(如果我想我可以从Google Drive Web App编辑此文件信息):

 public void leer(){
       DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id);
       file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
               .setResultCallback(contentsOpenedCallback);
   }
ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback =
        new ResultCallback<DriveApi.DriveContentsResult>() {
            @Override
            public void onResult(DriveApi.DriveContentsResult result) {
                if (!result.getStatus().isSuccess()) {
                    Log.e("Error:","No se puede abrir el archivo o no se encuentra");
                    return;
                }
                // DriveContents object contains pointers
                // to the actual byte stream
                DriveContents contents = result.getDriveContents();
                BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
                StringBuilder builder = new StringBuilder();
                String line;
                try {
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                String contentsAsString = builder.toString();
                Log.e("RESULT:",contentsAsString);
            }
        };

答案 2 :(得分:1)

几个月前我一直在玩这个东西,并且仍然在github上有一些代码。它可能非常过时(libver 15左右),但它可以作为参考点,它是(我希望简单)。 Look here。将其拉下,插入,逐步完成。修复不再工作的内容:-)。我不久前放弃了它。

请注意,Google Drive Android API对象有2个不同的ID,请参阅SO 22841237

通常,您通常从了解文件/文件夹名称开始,查询GDAA以获取对象列表。它们中的每一个都将产生DriveID和ResourceID。您的应用中使用DriveID来操纵对象(并不意味着Android应用和/或设备之外的任何内容)。 ResourceID是在URL中以不同形式出现的字符串,可以在应用程序外部使用(例如Web浏览器......)。看看这个wrapper以了解它是如何工作的。但同样,它还有几个版本,所以没有保证。祝你好运......

答案 3 :(得分:0)

已弃用Google Drive API,现在使用其Google Drive V3,我们使用Query

String pageToken = null;
  do {
  FileList result = driveService.files().list()
  .setQ("mimeType='image/jpeg'")
  .setSpaces("drive")
  .setFields("nextPageToken, files(id, name)")
  .setPageToken(pageToken)
  .execute();
  for (File file : result.getFiles()) {
  System.out.printf("Found file: %s (%s)\n",
    file.getName(), file.getId());
  }
  pageToken = result.getNextPageToken();
  } 

  while (pageToken != null);

您可以在Officals Docs

了解更多信息