Android 使用fileMetadata.getWebContentLink()从google硬盘下载文件

Android 使用fileMetadata.getWebContentLink()从google硬盘下载文件,android,google-drive-api,Android,Google Drive Api,我正在尝试下载一个文件它可以是任何使用fileMetadata.getWebContentLink的文件,如图像、pdf、文本等 当我打印此链接时,它显示如下内容: https://drive.google.com/uc?id=0Bw6vr2LNxB3iUFJrTk5oZDljaTA&export=download 当我将此链接放入桌面浏览器时,文件会自动下载。但我无法将此下载到我的应用程序中。 我用它来下载新的DownloadFileAsync.executefileMetadata

我正在尝试下载一个文件它可以是任何使用fileMetadata.getWebContentLink的文件,如图像、pdf、文本等

当我打印此链接时,它显示如下内容:

https://drive.google.com/uc?id=0Bw6vr2LNxB3iUFJrTk5oZDljaTA&export=download
当我将此链接放入桌面浏览器时,文件会自动下载。但我无法将此下载到我的应用程序中。 我用它来下载新的DownloadFileAsync.executefileMetadata.getWebContentLink

当我在我的谷歌硬盘中公开访问该文件时,它就会工作,否则它就不工作了。
任何人都知道为什么会发生这种情况以及如何修复这种情况吗???

按照以下步骤下载随机文件。创建一个名为DownloadFileAsync.java的类

public class DownloadFileAsync extends AsyncTask<String, String, String> {
  public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
  private ProgressDialog mProgressDialog;

  private Context context;

  public DownloadFileAsync(Context context) 
 {
this.context = context;
 mProgressDialog = new ProgressDialog(context);
 mProgressDialog.setMessage("Downloading file..");
 mProgressDialog.setIndeterminate(false);
 mProgressDialog.setMax(100);
 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 mProgressDialog.setCancelable(true);

}

@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}

@Override
protected String doInBackground(String... aurl) {

try {
    File root = Environment.getExternalStorageDirectory();
    URL u = new URL(aurl[0]);
    HttpURLConnection c = (HttpURLConnection) u.openConnection();
    c.setRequestMethod("GET");
    c.setDoOutput(true);
    c.connect();

    int lenghtOfFile = c.getContentLength();

    FileOutputStream f = new FileOutputStream(new File(root + "/", aurl[1]));

    InputStream in = c.getInputStream();

    byte[] buffer = new byte[1024];
    int len1 = 0;
    long total = 0;

    while ((len1 = in.read(buffer)) > 0) {
        total += len1; //total = total + len1
        publishProgress("" + (int)((total*100)/lenghtOfFile));
        f.write(buffer, 0, len1);
    }
    f.close();
} catch (Exception e) {
    Log.d("Downloader", e.getMessage());
}

return null;

}

protected void onProgressUpdate(String... progress) {
 Log.d("ANDRO_ASYNC",progress[0]);
 mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}

@Override
protected void onPostExecute(String unused) {
mProgressDialog.dismiss();
}


    }

WebcontentLink仅适用于浏览器

以下是在应用程序中下载文件的步骤

检索驱动器文件对象并打开文件内容。内容是二进制的 使用输入流读取内容,保存并关闭。
使用ExportLinks代替WebContentLinks我尝试了使用图像的方法,尽管我的文件可以是任何类型。但形象不能被正确地建构。例如,我在硬盘上的实际图像大小是25K,但在SD卡上显示的是48K左右@Vinay Jayaram这不是问题的答案。这只是一段使用URL下载Java文件的通用代码,与问题完全无关。
new DownloadFileAsync(TransformerActivity.this).execute(Constants.VIDEO_DOWNLOAD_LINK,"9T51B0108.mp4");