Я пытаюсь выяснить, как работает syncAdapter, я использовал примерSync Adapter в качестве примера/отправной точки, и я основывал свой первый тест на нем. Единственное различие заключается в том, что я не работаю с поставщиком контактов по умолчанию, но мне нужен один из моих собственных.SyncAdapter periodicsync() not triggering
Этот метод является таким же, как в демонстрации 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 WebService и показать его в журнале. Теперь у меня есть два вопроса:
- SYNC не запускается автоматически, когда я добавляю свою учетную запись в настройки. Мне нужно войти в учетную запись и установить флажок, чтобы начать синхронизацию?
- Синхронизация не запускается каждые 30 секунд в этом примере ... Нужно ли что-то добавить в методе perfomSync(), чтобы система узнала, что синхронизация выполнена и что может запускаться следующий запуск?
В настоящий момент я не пишу значения в contentProvider, просто потому, что пытаюсь выяснить, как работает синхронизация.
В настоящее время я тестирую эмулятор Android.
Заранее благодарю вас.
С наилучшими пожеланиями,
Робин
возможный дубликат [Почему ContentResolver.requestSync не вызывает синхронизацию?] (http://stackoverflow.com/questions/5253858/why-does-contentresolver-requestsync-not-trigger-a-sync) – jcwenger
Я установил периодическую синхронизацию с частотой <60 с и увидел сообщение logcat, которое система округлила это до 60 с - минимум, не упомянутый в документации. Конечно, я бы не читал эту страницу, если бы она вообще вообще синхронизировалась - для меня не работало периодическоеSync, независимо от setIsSyncable или http://stackoverflow.com/questions/7925802/syncadapter- not-being-called-dependent-on-order-of-account-setup-calls –
@rpan Вы нашли ответ на этот вопрос? –