2016-06-17 95 views
10

Volevo scaricare il file da Google Drive. Per questo ho implementato in Google Drive SDk e ho usato il seguente metodo.Come scaricare il file di Google Drive in Android

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

Ho anche provato a utilizzare il flusso di output ma non sono riuscito a salvare i dati in un file.

Ho provato a cercare intorno a questo, ma non sono riuscito a trovare alcun collegamento utile che possa guidarmi su come scaricare e archiviare il file.

+3

Hai visto https://developers.google.com/drive/android/files? – Shailendra

risposta

8

IMO, si dovrebbe leggere alcuni link utili di seguito:

Google Drive APIs Android - Guides - Working with File Contents

Google Drive Android API Demos at GitHub

Poi, si prega di fare riferimento ai seguenti frammenti, ovviamente quando ricevendo il flusso di input, è può salvarlo su un file nel dispositivo invece di stampare su 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); 
       } 
      }; 
} 

Spero che sia d'aiuto!

+3

Errore durante l'apertura del contenuto del file –

+1

Pubblica lo screenshot o logcat contiene quel messaggio di errore, il mio codice è stato testato con un file .txt e un file .jpg nel mio Google Drive – BNK

+1

06-26 11: 20: 39.815 24640-24640/com.google.android.gms.drive.sample.demo I/Timeline: Timeline: id id_attività: [email protected] ora: 412814845 06-26 11: 20: 45.585 24640-24640/com.google.android .gms.drive.sample.demo I/Timeline: Timeline: id id_attività: [email protected] ora: 412820613 06-26 11: 20: 48.475 24640-24640/com.google.android.gms.drive. sample.demo D/retrieve_contents: Caricamento in corso: 0 percento 06-26 11: 20: 49.495 24640-24640/com.google.android.gms.drive.sample.demo W/retrieve_contents: errore durante l'apertura del contenuto del file –