2016-06-17 39 views
10

Chciałem pobrać plik z dysku google. Do tego zaimplementowałem w Google Drive SDK i użyłem następującej metody.Jak pobrać plik z napisem google w Androidzie

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
     case REQUEST_CODE_OPENER: 
      if (resultCode == RESULT_OK) { 
       DriveId driveId = (DriveId) data.getParcelableExtra(
         OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 


      } 
      finish(); 
      break; 
     default: 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

Próbowałem również używać strumienia wyjściowego, ale nie można zapisać danych do pliku.

Próbowałem przeszukać ten problem, ale nie znalazłem żadnego przydatnego linku, który mógłby pomóc w pobieraniu i zapisywaniu pliku.

+3

Czy widziałeś https://developers.google.com/drive/android/files? – Shailendra

Odpowiedz

8

IMO, powinieneś przeczytać kilka przydatnych linków poniżej:

Google Drive APIs Android - Guides - Working with File Contents

Google Drive Android API Demos at GitHub

Następnie należy zapoznać się z następujących fragmentów, oczywiście po uzyskaniu strumień wejściowy, ty można zapisać do pliku w urządzeniu zamiast drukować do Logcat.

public class GoogleDriveActivity extends AppCompatActivity 
     implements GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener {   
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
     mProgressBar.setMax(100); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    protected void onPause() { 
     if (mGoogleApiClient != null) { 
      mGoogleApiClient.disconnect(); 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
     if (requestCode == RC_OPENER && resultCode == RESULT_OK) { 
      mSelectedFileDriveId = data.getParcelableExtra(
        OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult result) { 
     // Called whenever the API client fails to connect. 
     // Do something... 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) {   
     // If there is a selected file, open its contents. 
     if (mSelectedFileDriveId != null) { 
      open(); 
      return; 
     } 

     // Let the user pick a file... 
     IntentSender intentSender = Drive.DriveApi 
       .newOpenFileActivityBuilder() 
       .setMimeType(new String[]{"video/mp4", "image/jpeg", "text/plain"}) 
       .build(mGoogleApiClient); 
     try { 
      startIntentSenderForResult(intentSender, RC_OPENER, null, 0, 0, 0); 
     } catch (IntentSender.SendIntentException e) { 
      Log.e(TAG, "Unable to send intent", e); 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
    } 

    private void open() {   
     mProgressBar.setProgress(0); 
     DriveFile.DownloadProgressListener listener = new DriveFile.DownloadProgressListener() { 
      @Override 
      public void onProgress(long bytesDownloaded, long bytesExpected) { 
       // Update progress dialog with the latest progress. 
       int progress = (int) (bytesDownloaded * 100/bytesExpected); 
       Log.d(TAG, String.format("Loading progress: %d percent", progress)); 
       mProgressBar.setProgress(progress); 
      } 
     }; 
     DriveFile driveFile = mSelectedFileDriveId.asDriveFile(); 
     driveFile.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, listener) 
       .setResultCallback(driveContentsCallback); 
     mSelectedFileDriveId = null; 
    } 

    private final ResultCallback<DriveApi.DriveContentsResult> driveContentsCallback = 
      new ResultCallback<DriveApi.DriveContentsResult>() { 
       @Override 
       public void onResult(@NonNull DriveApi.DriveContentsResult result) { 
        if (!result.getStatus().isSuccess()) { 
         Log.w(TAG, "Error while opening the file contents"); 
         return; 
        } 
        Log.i(TAG, "File contents opened"); 

        // Read from the input stream an print to LOGCAT 
        DriveContents driveContents = result.getDriveContents(); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(driveContents.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.i(TAG, contentsAsString); 

        // Close file contents 
        driveContents.discard(mGoogleApiClient); 
       } 
      }; 
} 

Mam nadzieję, że pomoże!

+3

Błąd podczas otwierania zawartości pliku –

+1

Opublikuj zrzut ekranu lub logcat zawierający ten komunikat o błędzie, mój kod został przetestowany z plikiem .txt i plikiem .jpg na moim dysku Google – BNK

+1

06-26 11: 20: 39.815 24640-24640/com.google.android.gms.drive.sample.demo I/Oś czasu: Oś czasu: Identyfikator czynnego identyfikatora: [email protected] czas: 412814845 06-26 11: 20: 45.585 24640-24640/com.google.android .gms.drive.sample.demo I/Oś czasu: Oś czasu: Identyfikator elementu aktywności id: [email protected] czas: 412820613 06-26 11: 20: 48.475 24640-24640/com.google.android.gms.drive. sample.demo D/retrieve_contents: Postęp ładowania: 0 procent 06-26 11: 20: 49.495 24640-24640/com.google.android.gms.drive.sample.demo W/retrieve_contents: Błąd podczas otwierania zawartości pliku –