更新(2015年5月):
"垃圾"功能已在GDAA中实施,使下面的问题无关紧要.
原始问题:
当我使用新的"Google Drive Android API"(GDAA)时,我遇到了一些我无法弄清楚的差异.基本上,我有一个使用"com.google.api.services.drive"界面(插入,补丁,更新)的旧应用程序,我很乐意将其移植到GDAA.
首先,GDAA与drive.google.com网络应用.
使用旧服务,我使用了DriveScopes.DRIVE_FILE范围,因此我假设了类似的行为/结果.使用旧的"DriveScopes.DRIVE_FILE"创建的文件可以由我("驱动程序所有者")在" https://drive.google.com "中删除(我假设我的范围是DRIVE那里),后续的Android应用查询将无法找到他们.它表现得像我期望的那样:
使用新的GDAA,它似乎不起作用.这让我想到了第二点:
DELETE/TRASH功能.
我试图测试CRUD功能,根本找不到DELETE(再次,它可能是我的无知/短视).从"drive.google.com"中删除它们会让它们在那里隐身,但Android应用仍会看到它们.元数据可以查询"isTrashed()",但"MetadataChangeSet.Builder"中没有任何内容可以让我删除/删除它们,只有setMimeType(),setStarred(),setTitle().
我迷路了,请帮忙.
自从新的 Google Drive Android Api (GDAA) 推出以来,这个问题一直困扰着我。首先在这里讨论,我希望它会在以后的版本中消失,但它仍然存在(截至 2014/03/19)。用户删除的(指“drive.google.com”中的“删除”操作)文件/文件夹不断出现在
Drive.DriveApi.query(_gac, query), and
DriveFolder.queryChildren(_gac, query)
Run Code Online (Sandbox Code Playgroud)
也
DriveFolder.listChildren(_gac)
Run Code Online (Sandbox Code Playgroud)
方法,即使与
Filters.eq(SearchableField.TRASHED, false)
Run Code Online (Sandbox Code Playgroud)
查询限定符,或者如果我对结果使用过滤构造
for (Metadata md : result.getMetadataBuffer()) {
if ((md == null) || (!md.isDataValid()) || md.isTrashed()) continue;
dMDs.add(new DrvMD(md));
}
Run Code Online (Sandbox Code Playgroud)
使用
Drive.DriveApi.requestSync(_gac);
Run Code Online (Sandbox Code Playgroud)
没有影响。自移除以来经过的时间变化很大,我的最后一个案例超过 12 小时。它是完全随机的。
更糟糕的是,我什至不能依赖“drive.google.com”中的 EMPTY TRASH,它不会产生任何可预测的结果。有时文件状态更改为“isTrashed()”,有时它会从结果列表中消失。
当我不断摆弄这个问题时,我最终得到了以下超级骇客:
find file with TRASH status equal FALSE
if (file found and is not trashed) {
try to write content
if ( write content fails)
create a new file
}
Run Code Online (Sandbox Code Playgroud)
甚至这也无济于事。即使文件在垃圾箱中,该文件也显示为健康(并且它的状态被查询和元数据测试双重过滤)。它甚至可以愉快地写入并在垃圾箱中检查时进行修改。
这里的结论是修复应该获得更高的优先级,因为它使 Drive …