Filters.ownedByMe无法在“Android版Drive API”中使用(但在“API Client Library for Java”中正常使用)

以前,我正在使用“API Client Library for Java”在appdata文件夹中执行文件搜索。

在API Client Library for Java中搜索代码

private static void searchFromGoogleDrive(Drive drive, String qString) { try { Files.List request = drive.files().list().setQ(qString); do { FileList fileList = request.execute(); for (com.google.api.services.drive.model.File f : fileList.getItems()) { final String title = f.getTitle(); if (title == null || f.getDownloadUrl() == null || f.getDownloadUrl().length()  0); } catch (IOException ex) { log.error(null, ex); return; } return; } 

它适用于以下查询字符串。

 title contains 'jstock-fe78440e-e0fe-4efb' and trashed = false and 'appdata' in parents and 'me' in owners 

最近,我尝试迁移代码以使用“Drive API for Android”。 我有两个GoogleApiClient范围

  • Drive.SCOPE_FILE
  • Drive.SCOPE_APPFOLDER

在Drive API for Android中搜索代码

 private static void searchFromGoogleDrive(GoogleApiClient googleApiClient) { DriveFolder driveFolder = Drive.DriveApi.getAppFolder(googleApiClient); Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false), Filters.ownedByMe() )) .build(); DriveApi.MetadataBufferResult metadataBufferResult = driveFolder.queryChildren(googleApiClient, query).await(); if (metadataBufferResult == null) { Log.i("CHEOK", "metadataBufferResult is null"); } else { Log.i("CHEOK", "metadataBufferResult's status = " + metadataBufferResult.getStatus().isSuccess()); } if (metadataBufferResult != null && metadataBufferResult.getStatus().isSuccess()) { MetadataBuffer metadataBuffer = null; try { metadataBuffer = metadataBufferResult.getMetadataBuffer(); if (metadataBuffer != null ) { for (Metadata md : metadataBuffer) { if (md == null || !md.isDataValid()) { continue; } Log.i("CHEOK", "title = " + md.getTitle()); } // for } // if } finally { if (metadataBuffer != null) { metadataBuffer.release(); } } } return; } 

我意识到, Filters.ownedByMe是导致问题的原因。

以下是基于不同查询的不同结果。

失败

 Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false), Filters.ownedByMe() )) .build(); // metadataBufferResult's status = false 

失败

 Query query = new Query.Builder() .addFilter(Filters.and( Filters.ownedByMe() )) .build(); // metadataBufferResult's status = false 

成功

 Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false) )) .build(); // metadataBufferResult's status = true // title = jstock-fe78440e-e0fe-4efb-881d-264a01be483c-checksum=2298926779-date=1452429908167-version=1107.zip 

似乎Filters.ownedByMe()在Drive API for Android中无法正常工作

有什么我可以纠正的吗?