我正在为Android开发一个应用程序,我需要获取从Google云端硬盘获取的文件的父级列表。
我使用Drive.DriveApi.newOpenFileActivityBuilder()正确获取DriveId,但是当我使用DriveResource.listParents时,即使资源有父级,我也会获得一个空列表。
我对Drive.DriveApi.newOpenFileActivityBuilder()和DriveResource.listParents使用相同的GoogleApiClient,所以我认为这不是范围问题。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_CODE_GOOGLE_DRIVE_FILE_PICKER) {
if (resultCode == RESULT_OK) {
mSelectedFileDriveId = (DriveId) data.getParcelableExtra(OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
} else {
setResult(Constants.RESULT_CODE_KO);
finish();
}
}
}
...
private ResultCallback<MetadataBufferResult> metadataBufferCallback = new ResultCallback<MetadataBufferResult>() {
@Override
public void onResult(MetadataBufferResult result) {
if (!result.getStatus().isSuccess()) {
SDKUtils.showMessage(thisActivity, "Impossible salvare l'ultima posizione aperta in Google Drive");
return;
}
MetadataBuffer metadataBuffer = result.getMetadataBuffer();
// HERE I OBTAIN AN EMPTY OBJECT
}
};
...
mGoogleApiClient = new GoogleApiClient.Builder(this)
.setAccountName(driveAccontName)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
...
DriveFile driveFile = Drive.DriveApi.getFile(getGoogleApiClient(), mSelectedFileDriveId);
driveFile.listParents(GoogleApiClient apiClient).setResultCallback(metadataBufferCallback);
有什么建议吗? 谢谢!
答案 0 :(得分:0)
所以我认为这不是范围问题。
正是这样 - 范围问题!!!
Google Drive Android API仅提供drive.file和drive.appfolder范围。
文件范围意味着只能访问用户从您的应用程序中选择的那些文件。 Drive.DriveApi.newOpenFileActivityBuilder()
对话框将允许用户浏览整个驱动器,但只允许您的应用程序访问用户专门Select
的文件或文件夹。
假设您的驱动器上有以下文件夹结构 -
/root
|
+---books
+---c++
+---programming_gems.pdf
+---c++_notes.docs
现在使用Drive.DriveApi.newOpenFileActivityBuilder(),您可以选择programming_gems.pdf。 您的应用现已获得该pdf的访问权限。您可以检索文件及其元数据。 但是在这种情况下,您的应用将无法访问其父文件夹,c ++。 为什么?因为用户还没有访问c ++文件夹;只有一个特定的文件 那个文件夹。这也是有道理的;否则你可以从该文件夹中检索任何文件 让你的用户担心。
使用相同的Drive.DriveApi.newOpenFileActivityBuilder()获取c ++文件夹。现在,如果你的 app尝试检索programming_gems.pdf的父文件夹,它被授予访问权限。
现在再试一次;尝试列出c ++文件夹本身的内容。什么会回来 你的应用? - 只有programming_gems.pdf。为什么,因为用户没有授予对方的访问权限 file,c ++ _ notes.docs。
我希望很清楚。
P.S。
顺便说一句,要在拾取文件或文件夹之间进行选择,您必须设置mime类型。 请参阅以下代码,例如
if (openFolder) {
mime_type = new String[]{DriveFolder.MIME_TYPE};
} else {
mime_type = new String[]{};
}
IntentSender intentSender = Drive.DriveApi
.newOpenFileActivityBuilder()
.setMimeType(mime_type)
.build(getGoogleApiClient());
如果此示波器方案与您的要求不符,您可以选择使用Google Drive REST API - 继续阅读 - https://stackoverflow.com/a/25871516/1363471