2

Android の開発者向けドキュメントには、DriveApi.OnSyncFinishCallback を使用して、ローカル コンテンツと Google ドライブ アカウント間の同期が完了したときに (おそらく) 処理できると記載されています。通常、このような同期は自動的に追加され、Google Play Services によって透過的に管理されますが、次の呼び出しで同期要求を強制できるようです。

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 には使用できません。

4

3 に答える 3

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 に追加の同期の問題が発生する可能性があるため、当面はルート フォルダーを使用することを好みます。

于 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() が想定どおりに機能しないことが判明しました。幸いなことに、Google は Google Play サービスのバージョン 6.1 で Android 用の新しい Drive API、特に Completion Events を導入しました。公式の詳細はこちらhttps://developers.google.com/drive/android/completion

于 2014-10-09T14:29:38.853 に答える