1

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

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

有什么想法吗?

4

2 回答 2

3

无耻地把自己推销为谢丽尔的搭档,我可以给你一些具体的观点,因为我以前经历过这个挑战。这就是我所做的:

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

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

这是将 byte[] 缓冲区写入文件的方法。为了简单起见,它是 'await' 版本,但这里有一个异步版本'createFileAsync()' 。

 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;
}

关于身份证:

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

于 2014-03-20T11:44:42.830 回答
1

您不一定必须拥有 DriveId,它只是最可靠的方法,因为它唯一地标识了文件夹。您也可以根据标题进行查询以尝试找到相同的文件夹。假设 web 和 Android 应用程序共享一个应用程序 ID,两者都应该能够访问相同的文件。

在应用程序之间共享状态的一个简单选择是利用新推出的应用程序文件夹(在网络上称为应用程序数据文件夹)。这是一个隐藏文件夹,您可以在其中存储特定于您的应用程序的文件。它还没有出现在 Android 文档中,但它应该会在 Google Play Services 4.3 发布后立即出现。请参阅http://android-developers.blogspot.com/2014/03/google-play-services-43.html

于 2014-03-19T20:21:39.847 回答