2014-11-24 17 views
9

Próbuję opracować aplikację dla systemu Android, która może odczytać plik xml przechowywany w moim folderze na dysku google, pomysł na początku próbuje otworzyć plik i obsłużyć zawartość.Dysk Google API - Android - Jak uzyskać identyfikator pliku napędu?

Przeczytałem Google Drive API docs for android i osiągnąłem punkt, w którym jestem zagubiony, działa z zawartością pliku.

Według tego poprowadzić drogę, aby otworzyć plik z dysku to:

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

wyszukiwania zdałem sobie sprawę, że kompletny kod (które nie zawierają one istnieją):

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

Dobrze problem polega na tym, że nie znam pliku "id". Próbowałem id z linku internetowego z dysku Google, coś takiego (https://drive.google.com/open? id = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso & authuser = 0), ale nie działa.

+0

można spróbować otwierania napędu selektor plików za pomocą interfejsu API newOpenFileActivityBuilder, który pozwala użytkownikowi wybrać plik na Dysku. Oddzwanianie tego wywołania API zwróci identyfikator ID dysku wybranego pliku, a następnie można pobrać zawartość tak jak teraz. Zobacz https://developers.google.com/drive/android/intro#files i kod "Otwórz plik" na https://developers.google.com/drive/android/ – Shailendra

Odpowiedz

3

Rozwiązaniem, które znalazłem dla tego problemu było utworzenie pliku z aplikacji. Korzystanie z klasy ("CreateFileActivity.java") z aplikacji demo google drive drive.

W tej klasie zapisuję powracający plik Driveid z nowego pliku w globalnej zmiennej 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); 

      } 
     }; 

Następnie z tym identyfikatorem w inny sposób wzywam plik i odczytać go (jeśli chcę mogę edytować informacje o pliku z Dysku Google 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); 
      } 
     }; 
+0

, ale jak mogę edytować zawartość tego samego plik, czy możesz napisać jakiś kod? – Achin

6

Można użyć metody DriveAPI Query, aby pobrać wszelkie informacje dotyczące określonego pliku. trzeba będzie zdefiniować obiekt zapytania jak:

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

i ustawić funkcję zwrotną do iteracji na wynikach:

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

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

można znaleźć więcej informacji na ten temat tutaj: https://developers.google.com/drive/android/queries

1

Gram z tymi rzeczami kilka miesięcy temu i nadal mam kod na githubie. Może to być BARDZO nieaktualna (wersja 15 lub mniej), ale może służyć jako punkt odniesienia i jest (mam nadzieję, że jest prosta). Look here. Pociągnij w dół, podłącz, przejdź. Napraw to, co już nie działa :-). Porzuciłem go jakiś czas temu.

Należy pamiętać, że istnieją dwa różne identyfikatory obiektów interfejsu API Androida na Dysku Google, patrz SO 22841237.

Ogólnie rzecz biorąc, zwykle zaczynasz od znajomości nazwy pliku/folderu, zapytaj GDAA, aby uzyskać listę obiektów. Każdy z nich przyniesie DriveID i ResourceID. DriveID jest używany w twojej aplikacji do manipulowania obiektami (nie oznacza nic poza Twoją aplikacją i/lub urządzeniem Android). ResourceID to ciąg, który pojawia się w różnych postaciach w adresach URL i może być używany poza aplikacją (np. Przeglądarka internetowa ...). Spójrz na to wrapper, aby poczuć, jak to działa. Ale znowu, było kilka wersji wstecz, więc nie ma żadnych gwarancji. Powodzenia ...