如何在Android下载谷歌驱动器文件

我想从谷歌驱动器下载文件。 为此,我已经在Google Drive SDk中实施并使用以下方法。

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

我也尝试使用输出stream,但无法将数据保存到文件。

我试着search这个,但找不到任何有用的链接,可以指导我如何下载和存储文件。

Solutions Collecting From Web of "如何在Android下载谷歌驱动器文件"

海事组织,你应该阅读下面的一些有用的链接

Google Drive API Android – 指南 – 使用文件内容

Google Drive Android API在GitHub上的演示

然后,请参阅以下代码片段,当然在获取inputstream时,可以将它保存到设备中的文件中,而不是打印到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); } }; } 

希望能帮助到你!