androidgoogle-drive-apigoogle-drive-android-api

Google Drive API - Android - How to obtain a drive file id?


I'm trying to develop an android app that can read a xml file stored in my google drive folder, the idea at first is trying to open the file and handle the content.

I've read the Google Drive API docs for android and i reached a point that I'm lost, it's working with file contents.

According to this guide the way to open a file from drive is this:

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

Searching I realized that the complete code (that they not include there is):

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

Well the problem there is that I don't know the file "id". I've tried the id from the web link of google drive, something like this (https://drive.google.com/open?id=1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso&authuser=0) but didn´t work.


Solution

  • The solution i found for this problem was creating the file from the app. Using the class ("CreateFileActivity.java") from google drive api demo app.

    With this class i save the returning Driveid from the new file in a global DriveId variable.

    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);
    
                }
            };
    

    Then with this id in another method i call the file and read it (If i want i can edit this file information from 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);
                }
            };