2

ユーザーがレコードをオフラインで編集/追加できるアプリケーションがあり、インターネット接続が確立されるとすぐにサーバーに送信する必要があります。GMail アプリケーションの正確な動作のようです。

オフラインで電子メールを作成し、[送信] をクリックして、アプリケーション/プロセスを閉じます。インターネット接続が回復すると、電子メールをサーバーに送信する同期が実行されます。

問題は、毎日同期を実行している SyncAdapter を持つ SyncAccount が既にあることです。ContentResolver.addPeriodicSyncを使用して 2 番目の同期を追加する場合、別の機関を作成する必要があるため、別のデータベース テーブルを使用する必要がありますか?

同じデータベースにアクセスして、互いに独立した 2 つの同期操作をスケジュールできますか?

4

1 に答える 1

0

問題が解決しました。どうやら、同期をスケジュールするのではなく、すぐに 1 回限りの同期を要求できるようです。この 1 回限りの同期にエクストラのリストを提供することもできます。

したがって、私の解決策は、そのバンドルにパラメーターを配置し、それに応じてアダプターのonPerformSyncメソッドで魔法を実行することです。

    final String ACCOUNT_NAME = "dummyAcc";
    final String ACCOUNT_TYPE = "dummyAccType";
    final String PROVIDER = "dummyProvider";

    Account appAccount = new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
    AccountManager accountManager = AccountManager.get(this);
    Bundle extras = new Bundle();
    extras.putBoolean("magicParam", true);
    extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
    ContentResolver.requestSync(appAccount, PROVIDER, extras);

...

@Override
public void onPerformSync(Account account, Bundle extras, String authority,
        ContentProviderClient provider, SyncResult syncResult) {
    if (extras.getBoolean("magicParam")) {
       // do magic;
    }
}
于 2012-10-19T14:45:41.277 に答える