Я пытаюсь понять, как работает syncAdapter, я использовал примерSync Adapter в качестве примера/отправной точки, и я основал свой первый тест на нем. Единственное различие заключается в том, что я не работаю с поставщиком контактов по умолчанию, но мне нужен один из моих.
Этот метод является тем же самым, что и в демонстрации 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 и показываю его в журнале. Теперь у меня есть два вопроса:
- SYNC не запускается автоматически, когда я добавляю свою учетную запись в настройки. Мне нужно войти в учетную запись и установить флажок, чтобы начать синхронизацию?
- Синхронизация не запускается каждые 30 секунд в этом примере... Нужно ли добавлять что-то в метод perfomSync(), чтобы система могла знать, что синхронизация выполнена и что запуск может начаться?
В этот момент я не пишу значения в contentProvider, просто потому, что я пытаюсь выяснить, как синхронизация работает подробно.
В настоящее время я тестирую эмулятор Android.
Заранее благодарим за отзыв.
С уважением,
Робин