如何使用DriveApi.OnSyncFinishCallback(Android&#39的Google Play服务)

时间:2014-05-29 17:29:45

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

Android的开发人员文档指出,当您的本地竞争帐户与Google云端硬盘帐户之间的同步完成后,您可以使用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调用返回一个只有setResultCallback(ResultCallback arg0)方法的PendingResult,它不能用于OnSyncFinishCallback。

3 个答案:

答案 0 :(得分:3)

我必须说requestSync对我来说非常好(2015年1月,Google Play Services 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。从不同的设备安装/卸载应用程序时,appfolder可能会有其他同步问题,所以目前我更喜欢坚持使用根文件夹。

答案 1 :(得分:2)

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

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

Drive.Drive.requestSync(mGoogleApiClient).setResultCallback(
  new ResultCallback<Success>() {
     //...
  });

答案 2 :(得分:2)

事实证明,OnSyncFinishCallback已从API中移除,而DriveAPI.requestSync()并未执行其应有的操作。幸运的是,谷歌刚刚在Google Play服务的6.1版本中推出了适用于Android的新版Drive API,特别是完成事件,这正是OnSyncFinishCallback应该做的事情。更多官方详细信息https://developers.google.com/drive/android/completion