我测试了 Burcu 的答案,不幸的是它没有用。或者也许我错误地表达了这个问题。我会尝试重新措辞(我找到了正确答案)。
DriveId 有 2 种不同的字符串类型 ID 表示(文件和文件夹)。
1/ DriveId.encodeToString(), resulting in something like:
"DriveId:CAESHDBCMW1RVVcyYUZKZmRhakIzMDBVbXMYjAUgssy8yYFRTTNKRU55"
2/ and DriveId.getResourceId(), resulting in shorter:
"UW2aFJfdajB3M3JENy00Ums0B1mQ"
在 4.1 中,有两种方法可以将它们转回 DriveId
1/ DriveId.decodeFromString(DriveId.encodeToString());
2/ DriveId.createFromResourceId(DriveId.getResourceId());
它们都成对正常工作,我选择了 ResourceId 品种,因为这个短字符串出现在其他系统(Apps 脚本...)中使用的 http 地址中。例如:
https://docs.google.com/file/d/UW2aFJfdajB3M3JENy00Ums0B1mQ
此外,即使文件在 Google 云端硬盘中被操作(已删除、恢复、移动),它也似乎是持久的。
但在 4.2 中,createFromResourceId() 消失了,不能 被“decodeFromString()”替换,如下所示:
//INCORRECT
DriveId.decodeFromString(DriveId.getResourceId());
相反,必须以这种方式检索来自 ResourceId 的 DriveId:
DriveIdResult result = Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await();
DriveId drvID = result.getDriveId();
(为了简单起见,我使用“await”版本)。
所以结论是:
createFromResourceId() 被替换为
Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await().getDriveId()
需要注意的是,“await()”构造应该作为普通 UI 线程中的回调来实现。
更新(2014-10-23)
上面的答案比较陈旧,请参考下面的cmets。