1

我想使用Google Drive API在Google云端硬盘中列出目录中的所有文件和文件夹。但我只获取文件的Metadata对象,而不是目录中存在的文件夹。我使用下面的代码使用Google Drive API列出GDrive的文件和文件夹

DriveFolder folder = Drive.DriveApi.getRootFolder(getClient()); 
folder.listChildren(getClient()) 
.setResultCallback(new ResultCallback <DriveApi.MetadataBufferResult>() {@ 
    Override 
    public void onResult(DriveApi.MetadataBufferResult result) { 
     if (!result.getStatus().isSuccess()) { 
      L.c("Error in listing root folder"); 
      return; 
     } 
     MetadataBuffer metadataBuffer = result.getMetadataBuffer(); 
     Metadata filedata; 
     ListItem[] items = new ListItem[metadataBuffer.getCount()]; 
     L.c("Count :" + metadataBuffer.getCount()); 
     for (int i = 0; i < metadataBuffer.getCount(); i++) { 
      items[i] = new ListItem(metadataBuffer.get(i)); 
     } 
     listAdapter = new ArrayAdapter <ListItem> (ExplorerClass.this, android.R.layout.simple_list_item_1, items); 
     mainList.setAdapter(listAdapter); 
    } 
}); 
+0

如何创建文件夹? – pinoyyid

+0

@pinoyyid请检查我的编辑 –

+0

如何创建文件夹? – pinoyyid

回答

4

如果不是由您创建的应用程序或之前您的应用程序打开该目录中的文件夹或文件存在(在你的情况下根),您将无法看到他们与您的应用程序。这是因为您可能正在使用Drive.FILE范围:https://developers.google.com/drive/web/scopes

不幸的是,谷歌驱动器android API目前仅支持drive.file和drive.appfolder作用域。如果您需要drive.readonly.metadata范围,则可以使用Google Drive REST API。

+4

要添加到此(可能是正确的)答案... 假设我安装了您的应用程序。我真的想允许它读取和删除我的所有Drive文件吗?可能不会。因此,Drive实现了一系列范围,最常见的是drive.file,它只允许应用程序查看该应用程序最初创建的文件。在应用程序外部创建的文件,包括在drive.google.com中创建的文件夹都是隐藏的。 – pinoyyid

+1

您也可以使用文件选取器,它允许您列出文件和文件夹,包括应用程序尚无权访问的文件和文件夹。 https://github.com/googledrive/android-demos/blob/master/src/com/google/android/gms/drive/sample/demo/PickFolderWithOpenerActivity.java –

+0

纠正了Arthur的回答。 GDAA的文件选择器([intents here](https://github.com/googledrive/android-demos#intents))不允许你(应用程序),但允许您的应用程序的当前授权用户列出/查看所有在他/她的管辖范围内的档案 – seanpj

相关问题