我正在尝试使用google drive api列出Google云端硬盘帐户中的所有子文件夹和文件夹。当文件夹只包含子文件夹时,我只使用DriveFolder.getChildren时获得第一个子文件夹。如果文件夹只包含文件,我将不会让任何具有相同调用的子项,即DriverFolder.getChildren。 我也试过查询特定文件的文件夹,当然存在,但我也没有得到任何点击。
代码示例:
new Thread(new Runnable() {
@Override
public void run() {
//mGoogleApiClient is connected and mRootDrive is a folder in the drive account
DriveFolder f = Drive.DriveApi.getFolder(mGoogleApiClient, mRootDriveId);
MetadataResult fDataresult = f.getMetadata(mGoogleApiClient).await();
// Will print the right name of the folder
Log.i(Tag, "Folder name " + fDataresult.getMetadata().getTitle());
MetadataBufferResult result = f.listChildren(mGoogleApiClient).await();
// Will be one even if there are 10 folders
Log.i(Tag, "Number of children " + result.getMetadataBuffer().getCount());
}
}).start();
包含查询语句,代码如下:
new Thread(new Runnable() {
@Override
public void run() {
//mGoogleApiClient is connected and mRootDrive is a folder in the drive account
DriveFolder f = Drive.DriveApi.getFolder(mGoogleApiClient, mRootDriveId);
MetadataResult fDataresult = f.getMetadata(mGoogleApiClient).await();
// Will print the right name of the folder
Log.i(Tag, "Folder name " + fDataresult.getMetadata().getTitle());
Query query = new Query.Builder().addFilter(Filters.eq(SearchableField.TITLE, "tmp.txt")).build();
MetadataBufferResult result = f.queryChildren(mGoogleApiClient, query).await();
MetadataBuffer d = result.getMetadataBuffer();
// Will be 0 even if the file exist in the folder
Log.i(Tag, "Number of children " + d.getCount());
}
}).start();
经过进一步调查后,似乎在应用和谷歌硬盘之间同步数据存在一些问题。如果我在我的应用程序中使用谷歌驱动器UI并选择一个文件,那么将列出此文件,但没有其他文件。我试图使用Drive.DriveApi.requestSync,结果相同。
如果我理解这一点,那么GoogleApiClient范围只能是应用程序已创建或被查看的文件和文件夹,而不是所有文件夹和文件。我在寻找的是范围https://www.googleapis.com/auth/drive。此范围不由GoogleApiClient处理。