【发布时间】:2013-03-26 07:52:58
【问题描述】:
我正在尝试弄清楚 syncAdapter 的工作原理,我使用 sampleSync 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 webservice 并显示在日志中。现在我有以下两个问题:
- 当我在设置中添加我的帐户时,SYNC 没有自动启动。我需要进入帐户并选中复选框以开始同步?
- 在此示例中,同步不是每 30 秒触发一次...我是否需要在 perfomSync() 方法中添加一些内容,以便让系统知道同步已完成并且可以开始下一次运行?
目前我没有在 contentProvider 中写入值,只是因为我正在尝试详细了解同步的工作原理。
目前我正在 Android 模拟器上进行测试。
提前感谢您的反馈。
亲切的问候,
罗宾
【问题讨论】:
-
我设置了一个频率 stackoverflow.com/questions/7925802/…,periodicSync 都对我不起作用
标签: android android-contentprovider android-syncadapter