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

时间:2014-03-19 19:27:51

标签: android google-drive-api google-drive-android-api

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

无耻地向谢丽尔的助手宣传自己,我可以给你一些具体的观点,因为我之前已经完成了这个挑战。这就是我所做的:

  1. 创建一个独特的' root'对于我在系统根目录中的应用程序 - " MyStupidAppRoot'。在这里,您将遇到主要挑战,因为您是通过名称创建的,如果您将创建基于它不存在,您可能无法可靠地检查它。但情况会好转,请参阅SO 22382099SO 22515028
  2. 拥有可靠的主播' MyStupidAppRoot',您可以创建Cheryl提到的 AppFolder (尚未提供)或创建您自己的可见文件(再次,独特的创造挑战),可以保持你想要的任何东西。比如你所有的PREFERENCE字符串。我甚至勇敢地在那里存储完整的SQLite DB文件。因为你可以在文件中写一个byte []缓冲区。
  3. 然而,与你的应用程序的任何其他设备都可以找到' MyStupidAppRoot',从那里获取资源文件并阅读它。
  4. 应该注意的是,您自己的文件夹/文件与 AppFolder 之间的主要区别在于,用户无法读取 AppFolder <的内容/ em>,但仍然可以将其删除

    这里是如何将byte []缓冲区写入文件的。这是等待&#39;版本使其变得简单,但有一个 async 版本&#39; createFileAsync()&#39; 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中所述。这取决于你选择哪一个。来自&#39; encodeToString()&#39;的长篇文章更容易通过&#39; decodeFromString()&#39;转回到DriveId中,较短的一个可以在http地址中轻松识别,但需要async / await方法来取回DriveId - fetchDriveId()。

答案 1 :(得分:1)

你不一定要拥有DriveId,它只是最可靠的方式,因为它唯一标识文件夹。您还可以根据标题进行查询,以尝试查找相同的文件夹。假设网络和Android应用共享应用ID,两者都应该能够访问相同的文件。

在应用程序之间共享状态的一个简单选项是使用新推出的应用程序文件夹(在网络上称为应用程序数据文件夹。)这是一个隐藏文件夹,您可以在其中存储特定于您的应用程序的文件。它尚未出现在Android文档中,但只要Google Play Services 4.3的推出发布就会出现在那里。见http://android-developers.blogspot.com/2014/03/google-play-services-43.html