2

Android 的开发人员文档指出,您可以使用 DriveApi.OnSyncFinishCallback 来(大概)在本地内容和您的谷歌驱动器帐户之间的同步完成时进行处理。通常,此类同步会自动出现,由 Google Play 服务管理,但显然您可以通过以下方式强制同步请求:

Drive.DriveApi.requestSync(mGoogleApiClient);

我说“显然”是因为这个功能的官方文档很差,至少(https://developer.android.com/reference/com/google/android/gms/drive/DriveApi.html#requestSync(com.google .android.gms.common.api.GoogleApiClient) )

无论如何,可以使用以下代码实例化 OnSyncFinishCallback:

OnSyncFinishCallback myCallback = new OnSyncFinishCallback(){

    @Override
    public void onSyncFinish(com.google.android.gms.common.api.Status arg0) {
        // TODO Auto-generated method stub

    }

};

我的问题是在哪里以及如何注册此回调,以便在同步完成时自动调用它?requestSync 调用返回一个 PendingResult,它只有一个 setResultCallback(ResultCallback arg0) 方法,不能用于 OnSyncFinishCallback。

4

3 回答 3

3

我必须说 requestSync 对我来说工作得很好(2015 年 1 月,使用 Google Play 服务 6.5.87)。我在一台设备上备份我的数据库并在另一台设备上恢复它,但在恢复之前我以这种方式调用 requestSync:

    Drive.DriveApi.requestSync(mGoogleApiClient)
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status result) {
                    if (!result.isSuccess()) {
                        // Sync not ok
                        showMessage("Sync error");
                        return;
                    }
                    // Sync ok. I can safely do a query to get
                    // the database file and restore it.
                    ...

顺便说一句,我使用的是根文件夹,而不是 appfolder。从不同设备安装/卸载应用程序时,应用程序文件夹可能会出现额外的同步问题,所以目前我更喜欢使用根文件夹。

于 2015-01-06T18:27:34.790 回答
2

OnSyncFinishCallback 是一个红鲱鱼,它不应该暴露。

只需像任何其他 GoogleApiClient 方法一样向 requestSync 添加回调处理程序:

Drive.Drive.requestSync(mGoogleApiClient).setResultCallback(
  new ResultCallback<Success>() {
     //...
  });
于 2014-05-29T22:07:24.317 回答
2

事实证明 OnSyncFinishCallback 已从 API 中删除,并且 DriveAPI.requestSync() 没有做它应该做的事情。幸运的是,谷歌刚刚在 6.1 版的 Google Play 服务中引入了新的 Android Drive API,特别是完成事件,这正是 OnSyncFinishCallback 应该做的。更多官方细节在这里https://developers.google.com/drive/android/completion

于 2014-10-09T14:29:38.853 回答