gpt4 book ai didi

android - Google Drive Android API - 跨设备访问应用程序创建的文件和文件夹

转载 作者:行者123 更新时间:2023-11-29 16:02:44 24 4
gpt4 key购买 nike

使用新的 GDAA ,据我了解,要访问文件夹及其内容,您必须拥有该文件夹的 DriveId - 因为这可以确保应用只能访问它自己创建的内容。

现在,我的应用程序将文件上传到自定义文件夹中用户的 Google 云端硬盘帐户(图片)。首次创建此文件夹时,我将文件夹的 DriveId 保存到共享首选项,以便稍后访问该文件夹以进行更多上传。我的问题是我希望用户能够从多个设备访问图片(这样他/她例如可以在平板电脑上查看从他/她的手机上传的图片,反之亦然),但我不能这样做两台设备上都没有文件夹的 DriveId。我能想到的唯一解决方案是通过某些云服务在用户设备之间共享 DriveId,但这似乎非常不方便。

有什么想法吗?

最佳答案

无耻地将自己提升为 Cheryl 的助手,我可以给你一些具体的观点,因为我之前已经经历过这个挑战。这就是我所做的:

  1. 在系统根目录中为我的应用程序创建一个唯一的“根目录”-“MyStupidAppRoot”。在这里您将遇到主要挑战,因为您是按名称创建它,如果您基于它不存在来创建,您可能无法可靠地检查它。但它正在变得更好,请参阅 SO 22382099SO 22515028
  2. 一旦您拥有可靠的 anchor “MyStupidAppRoot”,您就可以创建 Cheryl 提到的 AppFolder(尚不可用)或创建您自己的可见文件(同样,独特的创造挑战),可以保留任何你想要的东西。比如你所有的 PREFERENCE 字符串。我什至勇敢地在那里存储了完整的 SQLite 数据库文件。这是可能的,因为您将 byte[] 缓冲区写入文件。
  3. 然后,安装了您的应用程序的任何其他设备都可以找到“MyStupidAppRoot”,从那里获取资源文件并读取它。

应该注意的是,您自己的文件夹/文件与 AppFolder 之间的主要区别在于,用户无法读取 AppFolder 的内容,但仍然可以删除它

以下是将 byte[] 缓冲区写入文件的方法。它是“等待”版本以使其简单,但有一个异步 版本“createFileAsync()”here .

 public DriveFile createFileWait(DriveFolder fldr, String name, String mime, byte[] buff) {
DriveFile drvFile = null;
if (isConnected()) try {
ContentsResult rslt = Drive.DriveApi.newContents(_gac).await();
if (rslt.getStatus().isSuccess()) {
Contents cont = rslt.getContents();
cont.getOutputStream().write(buff);
MetadataChangeSet meta = (mime == null) ?
new MetadataChangeSet.Builder().setTitle(name).build() :
new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime).build();
drvFile = fldr.createFile(_gac, meta, cont).await().getDriveFile();
}
} catch (Exception e) {}
return drvFile;
}

关于 ID:

您上面提到的 DriveId 是一个对象,可以将其转换为 2 个不同的字符串,如 SO 21800257 中所述。 .选择哪一个取决于您。来自 'encodeToString()' 的长的更容易通过 'decodeFromString()' 变回 DriveId,较短的可以在 http 地址中轻松识别,但需要 async/await 方法来取回 DriveId - fetchDriveId() .

关于android - Google Drive Android API - 跨设备访问应用程序创建的文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com