我正在开发一个 Android 应用程序,我需要获取从 google Drive 获取的文件的父级列表。
我使用 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);
有什么建议吗?
谢谢!
所以我认为这不是范围问题。
正是如此 - 范围问题!
Google Drive Android API 仅提供drive.file 和drive.appfolder 范围。
文件范围意味着只能访问用户从应用程序中选择的文件。这Drive.DriveApi.newOpenFileActivityBuilder()
对话框将允许用户浏览整个驱动器,但您的应用程序将被授予仅访问用户明确指定的文件或文件夹的权限Select
's.
假设您的驱动器上有以下文件夹结构 -
/root
|
+---books
+---c++
+---programming_gems.pdf
+---c++_notes.docs
现在使用 Drive.DriveApi.newOpenFileActivityBuilder() 您可以选择programming_gems.pdf。
您的应用程序现已获得对该 pdf 的访问权限。您可以检索文件及其元数据。
但您的应用程序将无法访问其父文件夹(在本例中为 c++)。
为什么?因为用户尚未授予对 c++ 文件夹的访问权限;仅其中的特定文件
那个文件夹。这也是有道理的;否则您可以从该文件夹中检索任何文件
让您的用户担心。
使用相同的 Drive.DriveApp.new OpenFile ActivityBuilder() 选取 c++ 文件夹。现在如果你的
应用程序尝试检索programming gems.pdf的父文件夹,它被授予访问权限。
现在再尝试一件事;尝试列出 c++ 文件夹本身的内容。将返回什么
你的应用程序? - 仅programming_gems.pdf。为什么,因为该用户尚未授予其他用户访问权限
文件,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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)