我编写了一个SyncAdapter,它接受"com.google"帐户并与appengine Web服务进行同步.使用开发工具同步测试器(在模拟器上)对此进行测试,此同步似乎正常工作.
问题是,它默认不同步.在"帐户和同步"中转到帐户会显示我的Google帐户为空白 - 就好像没有可用的同步服务一样.
我怀疑为了让我的同步显示在"帐户和同步"菜单中,我需要实现我自己的AccountAuthenticator,这与我认为谷歌的AccountAuthenticator必须已经做的完全相同.这不是一项令人兴奋的工作,而且似乎非常不必要.所以:
如果不,
我正在试图找出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();
}
Run Code Online (Sandbox Code Playgroud)
在perfomSync()方法中,我有以下方法:
@Override
public void onPerformSync(Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult) { …Run Code Online (Sandbox Code Playgroud)