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。
答案 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