我测试了Burcu的答案,不幸的是它没有工作。或者,也许我误解了这个问题。我会尽力重新评估它(并且我找到了正确的答案)。
DriveId有两种不同的字符串类型ID表示(包括文件和文件夹)。
1/ DriveId.encodeToString(), resulting in something like:
"DriveId:CAESHDBCMW1RVVcyYUZKZmRhakIzMDBVbXMYjAUgssy8yYFRTTNKRU55"
2/ and DriveId.getResourceId(), resulting in shorter:
"UW2aFJfdajB3M3JENy00Ums0B1mQ"
在4.1中,有2个方法是能将这些回驱动器Id
1/ DriveId.decodeFromString(DriveId.encodeToString());
2/ DriveId.createFromResourceId(DriveId.getResourceId());
他们两个成对工作正常,我选择了RESOURCEID品种,因为这短短的字符串出现在HTTP在其他系统中使用的地址(Apps脚本...)。例如: https://docs.google.com/file/d/UW2aFJfdajB3M3JENy00Ums0B1mQ
此外,即使在Google云端硬盘中处理文件(已删除,恢复,移动),该文件也会持续存在。
但在4.2中,createFromResourceId()消失,CAN NOT改为 “decodeFromString()” 是这样的:
//INCORRECT
DriveId.decodeFromString(DriveId.getResourceId());
相反,从RESOURCEID的驱动器Id已被检索这样:
DriveIdResult result = Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await();
DriveId drvID = result.getDriveId();
(为简单起见,我使用“await”版本)。
所以得出的结论是: 的createFromResourceId()代替
Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await().getDriveId()
需要提醒的是,“等待()”结构应在正常UI线程回调来实现。
更新(2014年10月23日)
上面的答案是相当陈旧,请参阅下面的注释。
你是对的,fetchDriveId替换为createFromResourceId。对困惑感到抱歉。 resourceId与Drive API的Web版本中使用的ID相匹配,而DriveId(和其上的encodeToString方法)对一些附加信息进行编码。如果您想要使用Android API以外的Web API,请使用resourceId,否则使用DriveId和encodeTo/FromString。 –
谢谢谢丽尔,你还可以请教关于DriveID(长的)的持久性吗?换句话说,我可以将它存储在我的应用程序的持久性存储中(例如SQLite),并在以后参考它?对我来说,“解码”比“fetchDriveId”方法更快。 – seanpj
是的,这是encodeToString的意图。它应该在文档中说。 –