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

Mar*_*lez 8 android google-drive-api google-drive-android-api

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

我已经阅读了针对AndroidGoogle Drive API文档,并且我达到了一个我丢失的地步,它正在使用文件内容.

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

DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`
Run Code Online (Sandbox Code Playgroud)

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

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

那么问题是我不知道文件"id".我从谷歌驱动器,像这样(的网站链接试过ID https://drive.google.com/openID = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso&AUTHUSER = 0),但didn't工作.

小智 6

您可以使用DriveAPI Query方法来检索有关特定文件的任何信息.您需要定义一个查询对象,如下所示:

Query query = new Query.Builder()
    .addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
    .build();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Mar*_*lez 2

我找到的解决方案是从应用程序创建文件。使用google Drive api 演示应用程序中的类(“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);

            }
        };
Run Code Online (Sandbox Code Playgroud)

然后在另一种方法中使用此 ID 调用该文件并读取它(如果我愿意,我可以从 Google Drive Web 应用程序编辑此文件信息):

 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);
            }
        };
Run Code Online (Sandbox Code Playgroud)