2014-03-05 96 views

回答

0

如果您有文件夾(或DriveFolder對象,您可以從中獲取元數據)的元數據,則可以致電getDriveId

如果你是網絡資源,您可以使用使用fetchDriveId

+3

我覺得歸結問題是:我如何獲得驅動器Id當我只知道文件夾名稱(又名標題),並將文件添加到文件夾? – smokybob

+1

在這種情況下,您可以使用查詢API搜索具有該標題的文件夾:https://developer.android.com/reference/com/google/android/gms/drive/DriveApi.html#query(com.google。 android.gms.common.api.GoogleApiClient,com.google.android.gms.drive.query.Query) –

+0

所以我可以得到不是通過我的應用程序創建的文件夾,但例如通過web界面[Google Drive](https: //drive.google.com) – Werder

3

@smokybob該資源ID獲得驅動器Id。我不知道它是否有助於原來的問題,但根據您的意見:

這是一個代碼片段,應該讓你的文件夾/文件DriveId。 'title','mime'和'fldr'參數是可選的。如果你通過null'fldr',搜索是全局的(在應用程序的FILE範圍內),否則在指定的文件夾內(不在子文件夾中)。它使用最簡單的 - 'await()'風格,它必須從UI線程運行。

請注意,文件夾/文件名稱不是Google雲端硬盤Universe中的唯一實體。 您可以在一個文件夾中擁有多個具有相同名稱的文件/文件夾!

GoogleApiClent _gac; // initialized elsewhere 

//find files, folders. ANY 'null' ARGUMENT VALUE MEANS 'any' 
public void findAll(String title, String mime, DriveFolder fldr) { 
    ArrayList<Filter> fltrs = new ArrayList<Filter>(); 
    fltrs.add(Filters.eq(SearchableField.TRASHED, false)); 
    if (title != null) fltrs.add(Filters.eq(SearchableField.TITLE, title)); 
    if (mime != null) fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime)); 
    Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 
    MetadataBufferResult rslt = (fldr == null) ? 
    Drive.DriveApi.query(_gac, qry).await() : 
    fldr.queryChildren(_gac, qry).await(); 
    if (rslt.getStatus().isSuccess()) { 
    MetadataBuffer mdb = null; 
    try { 
     mdb = rslt.getMetadataBuffer(); 
     if (mdb != null) { 
     for (Metadata md : mdb) { 
      if (md == null) continue; 
      DriveId dId = md.getDriveId();  // here is the "Drive ID"   
      String title = md.getTitle(); 
      String mime = md.getMimeType(); 
      // ... 
     } 
     } 
    } finally { if (mdb != null) mdb.close(); } 
    } 
} 

總體而言,你可以得到「驅動器Id」你需要:

  1. 文件/文件夾名稱,如圖上面的代碼,或
  2. ,您對字符串標識符來自'encodeToString()'。例如,我使用它來緩存MYROOT文件夾ID,或者從'getResourceId()'獲取的字符串標識符爲
  3. 。這是你在html地址中看到的字符串。但是由於你的唯一範圍是FILE,所以不要指望用它來打開你的應用程序沒有創建的東西。

2和3標識符都是字符串,所以它們可能會混淆。標識符2在檢索驅動器ID時(通過decodeFromString())速度更快。標識符3檢索速度較慢(通過fetchDriveId()),但如果您需要將其他標識符(例如Apps Script)用於其他標識符,則該標識符有用。另請參閱SO 21800257

就創建文件/文件夾而言,我在GitHub here上有一些代碼。如果您看到等待\ MainActivity.java ... buildTree(),您將在構建簡單文件夾樹時遞歸地看到創建文件夾/文件。 OK。

+0

GitHub頁面未找到· –

+0

我已經退休。這裏仍然有一個[GDAADemo](https://github.com/seanpjanson/GDAADemo),但我有一段時間沒有觸及它,GDAA可能已經發展了。 – seanpj

4

OK。我經歷了Github上的驅動器演示了同樣的問題:https://github.com/googledrive/android-demos

在自述的底部,它說:

如果你真的想運行此示例應用程序(雖然它主要是 設置您可以閱讀代碼),則需要使用您自己的調試密鑰爲com.google.android.gms.drive.sample.demo軟件包註冊OAuth 2.0客戶端,並將任何資源ID設置爲您有權訪問的那些ID至。資源ID定義位於:

com.google.android.gms.drive.sample.demo.BaseDemoActivity。EXISTING_FOLDER_ID com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID

他們並沒有真正指定一個應該如何準確獲取和設置RESOURCEID在BaseDemoActivity定義的EXISTING_FOLDER_ID和EXISTING_FILE_ID常數文件,在閱讀上面的seanpj註釋之後,我使用他的方法3找到DriveID,以便我可以將它添加到演示應用程序中,以便它正常運行。

所有人需要做的就是去你的電腦上的驅動器,然後點擊頂部的「鏈接」按鈕。

link on google drive

鏈路的一部分說 「ID = XXXXXXXXXXX」。將其複製並粘貼到演示應用程序的BaseDemoActivity文件中。對您在Drive上創建的文件和文件夾執行此操作。

Demo應用現在應該可以成功運行。

+0

我在重複我自己,但是我想知道有問題的文件必須由DEMO應用程序本身創建。 GDAA僅支持FILE範圍,即只能使用由其創建的文件/文件夾。在一個鬆散的相關問題中,我在Github上放了一段測試代碼,這除了官方的DEMO(它更簡單)之外可能是有用的。歡迎您進行介紹。 https://github.com/seanpjanson/GDAADemo – seanpj

相關問題