私はsyncAdapterがどのように機能するかを理解しようとしています.sampleSyncアダプタを例/出発点として使用し、それに基づいて最初のテストを行いました. 唯一の違いは、デフォルトの連絡先プロバイダーを使用していないことですが、独自の連絡先プロバイダーが必要です。
このメソッドは、sampleSyncAdapter デモ (AccountAuthenticatorActivity 内) と同じです。定期的な同期を追加しただけです。
public void finishLogin(String authToken) {
Log.i(TAG, "finishLogin()");
final Account account = new Account(mUsername, "be.company.syncAdapterTest");
if(mRequestNewAccount) {
mAccountManager.addAccountExplicitly(account, mPassword, null);
ContentResolver.setIsSyncable(account, MY_AUTHORITY, 1);
Bundle params = new Bundle();
params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
ContentResolver.addPeriodicSync(account, MY_AUTHORITY, params, 30);
ContentResolver.setSyncAutomatically(account, MY_AUTHORITY, true);
ContentResolver.requestSync(account,MY_AUTHORITY,params);
} else {
mAccountManager.setPassword(account, mPassword);
}
final Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, "ACCOUNT_TEST");
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, "be.company.syncAdapterTest");
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
finish();
}
perfomSync() メソッドには、次のメソッドがあります。
@Override
public void onPerformSync(Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult) {
Log.d(TAG, "onPerformSync() start");
// Testje
try {
final String authToken = mAccountManager.blockingGetAuthToken(account, "be.company.syncAdapterTest", NOTIFY_AUTH_FAILURE);
Log.d(TAG, SAPNetworkUtilities.getWeek(account, authToken, getRandomDate()));
} catch (OperationCanceledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AuthenticatorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d(TAG, "onPerformSync() end");
}
ここでは、単純な SAP Web サービスを呼び出してログに表示するだけです。今、私は次の2つの質問があります:
- 設定でアカウントを追加しても、同期が自動的に開始されません。同期を開始するには、アカウント内に移動してチェックボックスをオンにする必要がありますか?
- この例では、同期は 30 秒ごとにトリガーされません... 同期が完了し、次の実行を開始できることをシステムに知らせるために、perfomSync() メソッドに何かを追加する必要がありますか?
現時点では、同期がどのように機能するかを詳細に把握しようとしているという理由だけで、contentProvider に値を書き込みません。
現在、私は Android エミュレーターでテストしています。
フィードバックをお寄せいただきありがとうございます。
敬具、
ロビン