2015-05-24 113 views
2

我可以从谷歌驱动器获取文件的驱动器ID。 通过以下代码。如何获取谷歌驱动器的文件的URL在Android下载

import com.example.googledrivetest2.ProcessDownload.DownloadFileAsync; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.PendingResult; 
import com.google.android.gms.common.api.Result; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi; 
import com.google.android.gms.drive.DriveApi.DriveContentsResult; 
import com.google.android.gms.drive.DriveApi.DriveIdResult; 
import com.google.android.gms.drive.DriveContents; 
import com.google.android.gms.drive.DriveFile; 
import com.google.android.gms.drive.DriveFolder; 
import com.google.android.gms.drive.DriveFolder.DriveFileResult; 
import com.google.android.gms.drive.DriveId; 
import com.google.android.gms.drive.DriveResource; 
import com.google.android.gms.drive.Metadata; 
import com.google.android.gms.drive.MetadataChangeSet; 
import com.google.android.gms.drive.OpenFileActivityBuilder; 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.i(TAG, "in onActivityResult() - triggered on pressing Select"); 

     switch (requestCode) { 

      case REQUEST_CODE_SELECT: 
       if (resultCode == RESULT_OK) { 
        /*get the selected item's ID*/ 
        DriveId driveId = (DriveId) data.getParcelableExtra(
          OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);//this extra contains the drive id of the selected file 
        Log.i(TAG, "Selected folder's ID: " + driveId.encodeToString()); 
        Log.i(TAG, "Selected folder's Resource ID: " + driveId.getResourceId());// this is the id of the actual file 
        Toast.makeText(getApplicationContext()," my id: "+driveId.getResourceId() , Toast.LENGTH_LONG).show(); 

        DriveFile file = Drive.DriveApi.getFile(googleApiClient,driveId); 
        .... 
        } 
       }; 

现在,我想该文件的URL,这样我可以通过URL使用此LINK

+0

您是否尝试过使用file.getDownloadUrl()? “ –

+0

”getDownloadUrl()“没有这样的方法@ BidhanA – kkkk

+0

你能给我一个你得到的driveId的例子吗?打印driveId.getResourceId()时会得到什么? –

回答

0

下面的代码将获得url供您下载。

String downloadUrl = file.getWebContentLink();

用一个简单的谷歌搜索发现:https://developers.google.com/drive/web/manage-downloads#downloading_files_in_a_browser

全码:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.i(TAG, "in onActivityResult() - triggered on pressing Select"); 

    switch (requestCode) { 

     case REQUEST_CODE_SELECT: 
      if (resultCode == RESULT_OK) { 
       /*get the selected item's ID*/ 
       DriveId driveId = (DriveId) data.getParcelableExtra(
         OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);//this extra contains the drive id of the selected file 
       Log.i(TAG, "Selected folder's ID: " + driveId.encodeToString()); 
       Log.i(TAG, "Selected folder's Resource ID: " + driveId.getResourceId());// this is the id of the actual file 
       Toast.makeText(getApplicationContext(), " my id: " + driveId.getResourceId(), Toast.LENGTH_LONG).show(); 

       DriveFile file = Drive.DriveApi.getFile(googleApiClient, driveId); 

       //get download url 
       String downloadUrl = file.getWebContentLink(); 
       //do something with the url, for example: 
       System.out.println("Download URL: " + downloadUrl); 
       //more info here: https://developers.google.com/drive/web/manage-downloads#downloading_files_in_a_browser 
      } 
    } 
} 

例子:

import com.google.api.services.drive.Drive; 
import com.google.api.services.drive.model.File; 

import java.io.IOException; 
import java.io.InputStream; 

// ... 

public class MyClass { 

    // ... 

    /** 
    * Download a file's content. 
    * 
    * @param service Drive API service instance. 
    * @param file Drive File instance. 
    * @return InputStream containing the file's content if successful, 
    *   {@code null} otherwise. 
    */ 
    private static InputStream downloadFile(Drive service, File file) { 
     if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) { 
      try { 
       // uses alt=media query parameter to request content 
       return service.files().get(file.getId()).executeMediaAsInputStream(); 
      } catch (IOException e) { 
       // An error occurred. 
       e.printStackTrace(); 
       return null; 
      } 
     } else { 
      // The file doesn't have any content stored on Drive. 
      return null; 
     } 
    } 

    // ... 
} 
+0

它告诉投到'文件'。我应该施放它? @SuperThomasLab – kkkk

+0

@kkkk什么行?我真的不知道,我刚刚从谷歌获得这些信息。只要尝试,如果它的工作,然后... –

+0

它通过崩溃给出了一个错误。 – kkkk

2

您是否尝试过这种方法吗?

DriveFile file = Drive.DriveApi.getFile(googleApiClient,driveId); 
MetadataResult mdRslt = file.getMetadata(googleApiClient).await(); 
if (mdRslt != null && mdRslt.getStatus().isSuccess()) { 
    String link = mdRslt.getMetadata().getWebContentLink(); 
    Log.d("LINK", link); 
} 
+0

我这个错误:java.lang.RuntimeException:失败的结果ResultInfo {who = null,request = 102,result = -1,data = Intent {act = android.intent.action.PICK(has extras)}} to activity {com .example.googledrivetest2/com.example.googledrivetest2.DownloadActivity}:java.lang.IllegalStateException:伺机不得在UI线程调用@Bidhan一个 – kkkk

+0

哎呀。我忘了。 await()方法将阻塞线程直到获得结果。它不应该在UI线程中调用。您应该将此方法放在回调方法或某个后台线程中。你知道怎么做吗? –

+0

我不明白,因为我是新的。 – kkkk

0

您正在使用错误的库。

您目前正在使用Google Drive Android API。这仅允许访问存储在设备上的云端硬盘应用程序中的文件。它不允许您访问云中的云端硬盘文件。这就是为什么你看到classCastExceptions。

首先删除所有导入语句,并将它们替换为Google Drive Java库中的等价物。作为一个简单的线索,任何含有.gms的导入都是不正确的。

0

如果主要目的是下载文件,可以在android-sdk中使用示例。 您将需要driveID,但如果你有这个,可以使用该示例。您将在这里找到它: ./android-sdk/extras/google/google_play_services/drive/demo 查找该文件名为:RetreiveContentsWithProgressDialog.java

的文件显示你如何写一个进度下载。

相关问题