Android Google Play / Drive Api

2023-12-11

您好,我正在使用 Google Drive Api 通过 AppDataFolder 工具来存储数据库。我有一个测试应用程序在一台设备上成功运行。我能够上传/更新/删除/下载数据库文件并将其重新集成到程序中,没有任何问题。

我遇到的问题是,当我想与运行同一应用程序的另一台设备共享此数据库时,事情就无法按预期工作。示例设备 A 我上传数据库,设备 B - 我想下载数据库但未找到文件(此延迟可能有很大差异,从几秒到几小时不等)。原因 - 当使用 Api 时,它决定何时要“同步”数据,因为数据是排队的而不是立即上传的。因此,当在一台设备上使用时,这不是问题,因为它从云存储中获取“同步”文件,或者等待同步的文件。

我尝试过各种方法,例如尝试列出所有 AppDataFolder 文件或在发出更新/删除请求之前通过带有可搜索过滤器的查询检索元数据等。但是我无法让它按需要工作,从根本上来说它选择何时同步。

所以我的实际问题是:如何强制 Google Drive 在我想要的时候同步我的文件,即每次发出请求时,以便使用同一应用程序在多个设备之间实现同步。必须有一个答案,因为我认为这是您首先使用 AppDataFolder 的根本原因。

提前致谢

编辑/更新:

我已经能够在 Api 中找到一个选项来使用以下代码“同步”驱动器内容:

            // try to sync
            Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() {
                @Override
                public void onResult(com.google.android.gms.common.api.Status status) {
                    if (!status.getStatus().isSuccess()) {
                        Log.e("SYNCING", "ERROR" + status.getStatusMessage());
                    } else {
                        Log.e("SYNCING", "SUCCESS");
                        // execute async task to list AppFolderContents
                        new AppFolderContentsAsyncTask(getActivity()).execute();
                    }
                }
            });

这对于快速连续 3/4 次尝试效果很好,但是我达到了同步限制和状态消息:

错误同步请求速率超出限制。

有没有什么方法可以提高请求率,因为如果我必须有一个应用程序提示用户“请稍后重试同步 - 但不确定您需要等待多长时间才能同步!”,这并不是真正理想的!

解决方案 - 各种,以及我的想法(无论其价值)

我想要的解决方案(在向应用程序开发人员发送电子邮件后,他发布了可以毫无问题地同步的驱动器应用程序)是使用 Drive REST Api,而不是较新的(也是 Google 首选的)Drive API。我尝试将“requestSync”限制为仅当用户使用“驱动器”选项导航到片段时(而不是每个文件事务)。然而,这可能会在很大程度上解决 requestSync 速率限制,但它仍然可能达到该限制。此外,如果多个设备正在运行该应用程序,并且链接到同一云端硬盘帐户,并且在该应用程序中同时同步/上传/删除文件,则可能会丢失同步 - 也许是一种罕见的情况,但仍然有可能。我不认为让用户等待同步文件在用户体验或应用程序设计方面是一个可行的选择。

不过很好奇 - 实际的云端硬盘应用程序可以让您根据需要多次刷新(requestSync?)。我在网络界面上快速连续创建了 20 个文件夹,创建每个文件夹后,我刷新手机上的云端硬盘应用程序,它同步了 20 次。谷歌似乎了解同步的重要性,但选择让同步变得相当困难,以在新的 Drive API 中确保这一点。如前所述,将文件上传到云存储通常会立即发生(它会排队,但是如果您有连接,它几乎会立即发生)。我本以为这是移动数据/更新驱动器内容方面成本高昂的事务,而不仅仅是查询文件同步。不过,您可以一次向您的云端硬盘应用程序添加一个文件,它几乎会立即一次上传一个文件 - 当您在 30 秒内请求同步超过 4 次时,它就会失败,您必须“冷静下来” ' 一阵子。

一般来说,我对编程/Android非常陌生 - 一旦我学习了新东西,我就意识到我实际上知道的很少,所以如果他们是使用 Drive API(而不是 REST API)的更好的解决方案,我会非常欢迎。


DriveApi#requestSync 将允许您请求从服务器到设备的“同步”。这样,在第二台设备上您应该能够看到从第一台设备上传的内容。但是,请求同步的调用受到速率限制(每个设备),以避免滥用并保证 Drive API 使用合理的数据量。理想情况下,您应该仅在需要时才调用请求同步。没有办法提高速率限制。

关于上传完成,提交上传后,您不应该使用请求同步,因为这对您没有帮助(它只向下同步而不是向上同步)。实际上传将尽快进行(根据设备的连接情况以及您的应用程序通过DrivePreferencesApi,默认情况下不受限制)。

如果您想知道实际上传发生的时间,您可以使用完成事件。通过这种方式,您可以通过更深入地了解实际情况来测试您的应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Google Play / Drive Api 的相关文章

随机推荐

  • 获取 Javascript 中其他位置的偏移量

    我在亚洲 我想计算澳大利亚的偏移量 我知道如何计算偏移量的值 代码如下 var timezone offset new Date getTimezoneOffset 但其他地点如何计算呢 有人可以指导我吗 虽然这can如果要在一个简短的函数
  • 在linux终端中编译c++文件:string_view:没有这样的文件或目录

    我有 gcc Cadence 4 8 3 我想编译一个包含 string view 的 C 文件 当我编译文件时 g script cpp 出现以下错误 script cpp 4 23 fatal error string view No
  • Android - 使用push()插入多个标记

    我可以在地图上插入多个标记 但是 当我插入 Firebase 数据库时 只有最后放置的标记被插入 我想我必须使用某种列表或哈希图 POJO类 public class FirebaseMarker String address String
  • 在 python 脚本中使用 youtube-dl 仅从 youtube 视频下载音频

    有一个few posts on 下载音频来自 YouTube 使用youtube dl 但没有一个是具体的或太有帮助的 我想知道从 Python 脚本中执行此操作的最佳方法是什么 例如 以下是下载视频的 README 示例 import y
  • Python - 沃尔玛的网络抓取

    我正在尝试从中获取一些数据Walmart使用 Python 和 BeautifulSoupbs4 简而言之 我编写了一段代码来获取所有类别名称并且有效 import requests from bs4 import BeautifulSou
  • 启动前为进程设置环境变量

    我有以下情况 我有 Mac OS 捆绑包 其中包含使用一些第三方动态库的应用程序 这些库依赖于一些环境变量 让我们命名它ENV VAR 我想设置ENV VAR仅对我的应用程序具有某些值 因为如果我为整个系统设置它 可能会破坏其他一些应用程序
  • 通过 jQuery 发布数组

    我有一个表单 其中包含一些唯一的输入字段和一些具有重复名称的其他字段 如下所示
  • 如何为 Core Data 中的二进制数据启用外部存储

    我想使用 iOS 5 附带的新的外部二进制数据作为核心数据 我已经看过有关它的文章 例如 http bluecrowbar com blog 2011 08 coredata external html 除了告诉您选中 允许外部存储 框之外
  • 使用 Java 将文本复制到剪贴板

    我想从 a 复制文本JTable的单元格复制到剪贴板 使其可以粘贴到其他程序中 例如 Microsoft Word 我有来自JTable 但我不确定如何将其复制到剪贴板 这对我有用并且非常简单 导入这些 import java awt da
  • 如何检测用户现有订阅的价格是否已更改(Google Play 应用内购买)?

    Google 有文档说明如果订阅价格发生变化该怎么办 您应该使用计费客户端并启动PriceChangeConfirmationFlow 但是 您如何首先检测价格是否发生变化 哪个 Android 库 API 会告诉我这一点 SkuDetai
  • 在 Printf 模块中输入

    在文件中打印模块 不太明白其中的机制 a out channel unit format 我想我在实践中经常使用它 例如 以下函数在编译时可以很好地键入 type t x int y int let print chan out chann
  • Balanced_accuracy 不是 scikit-learn 中的有效评分值

    与这篇文章超级相似 ValueError balanced accuracy 不是 scikit learn 中的有效评分值 我在用 scoring precision macro recall macro balanced accurac
  • Android:自定义相机拍摄的图像太暗

    在我的应用程序中 我必须拍摄自定义活动的照片 我实现了所有功能并且可以保存我的照片 但在某些设备中它们太暗了 我有这段代码 但它对我没有帮助 Parameters params mCamera getParameters if params
  • Clock() - C 函数的执行时间

    我正在尝试测量 C 代码块的执行时间 我的代码中有类似这样的内容 clock t begin end double time spent begin clock ATL dsymv 122 n alfa A n X 1 beta Y 1 e
  • 在 powershell 中聚焦 IE 窗口

    My code ie new object com InternetExplorer Application ie navigate http localhost ie visible true ie fullscreen true 但是全
  • 如何在 RMI 方法的参数中传递对象?

    我正在尝试在 RMI 方法中添加参数 当我添加例如String一切正常 但我不确定是否可以传递我创建的对象 我是 RMI 新手 所以我的代码非常简单 HelloIF public interface HelloIF extends Remo
  • 尝试使用 JavaScript 从 azure 获取访问令牌时无法加载响应数据

    我想为我在 azure 上注册的应用程序获取访问令牌 为此 我编写了一段代码来访问其余 API 这是我的代码
  • 数据透视表字段显示除空白之外的所有内容

    我需要在刷新后更新数据透视过滤器以选择除blank 这里的其他答案利用 ShowAllItems方法对我不起作用 因为它也会显示没有数据的项目 下面的枢轴选项Display 我尝试使用在另一个问题上找到的另一个解决方案 PivotItems
  • 通过自定义协议符合 MKAnnotation 协议

    我想轻松地在地图上获取 2 个或更多不同的对象类型 Swift 2 0 我想使用协议 我创建了一个这些对象也需要遵守的协议 我假设现在任何符合 PinProtocol 的项目本质上与 MKAnnotation 相同 只是更多 protoco
  • Android Google Play / Drive Api

    您好 我正在使用 Google Drive Api 通过 AppDataFolder 工具来存储数据库 我有一个测试应用程序在一台设备上成功运行 我能够上传 更新 删除 下载数据库文件并将其重新集成到程序中 没有任何问题 我遇到的问题是 当