我已经在SDK中的SimpleSyncAdapter示例项目中实现了SyncAdapter,AccountManager和私有ContentProvider.一切运作良好.
现在,我想在从具有特定标志集的远程服务器下载新行时向用户显示一条消息.当Sync完成时,我需要来自SyncAdapter的回调,因此我可以执行查询并显示来自活动的消息.我在StackOverflow上看到了一些关于这个问题的问题,但没有一个问题得到了很好的答案.
如何从Android SyncAdapter收听进度?说SyncStatusObserver没用.用户mobibob建议使用ResultReceiver从同步线程回复UI.
如何知道同步完成的时间?建议在SyncService中使用Intent.
如何向Android SyncManager发送sync-complete信号?建议使用SyncResult.由maxpower47链接的示例代码使用SyncResult类报告异常,但不实际报告同步是否成功完成.
我只是不知道哪个是最好的选择,我还没有看到任何使用这些解决方案的示例项目.
我是syncAdapter的新手.我已经观看了谷歌IO视频(这里的讲座演示),我已经阅读了2篇关于它的教程(这里和这里).
我也试过了教程的代码,令人沮丧的是我无法弄清楚如何正确实现syncAdapter.
我认为有些偏好(在清单或xml文件中)都是错误的,但我找不到原因.
我成功地允许添加同步帐户并显示它的图标.
但是,我面临一些奇怪的问题,我无法弄清楚它们为什么会发生:
允许帐户同步.最终用户无法按下同步按钮.即使我在添加帐户时尝试添加此类内容,它似乎也不会自动同步.
添加帐户后,最终用户可以看到帐户的奇怪描述:"res/xml/authenticator.xml".不知道它的设置在哪里.
当点击帐户(添加后),我看到一个空列表(这是问题.如何在那里添加更多项目?将来,我还需要与facebook和gmail同步,但我不能成功将我自己的contentProvider添加到此列表中.
我不需要进行真正的授权,所以我只是在从AccountAuthenticatorActivity扩展的活动中使用下一个代码:
accountManager.addAccountExplicitly(account, PASSWORD, null);
final Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, USERNAME);
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType);
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
finish();
Run Code Online (Sandbox Code Playgroud)
我还尝试使用此处描述的内容设置自动同步并启用同步.
android synchronization android-contentprovider android-syncadapter
我有我自己ContentProvider和SyncAdapter这两者很好地工作.
我将它们设置为自动与ContentResolver.setSyncAutomatically()此作品同步.我还可以使用Dev Tools - > Sync Tester测试同步.
现在,我想从我的应用程序请求同步(如果我们有没有数据),并在完成时得到通知,所以我可以更新的界面(我展示一个进度条与标志,而它的同步).我正在这样做ContentResolver.requestSync(),但我没有找到一种方法在同步完成时得到通知.
有谁知道如何做到这一点?谢谢.
我试图使用此代码以编程方式启动日历同步
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, true);
ContentResolver.requestSync(accounts[0], "com.android.calendar", bundle);
Run Code Online (Sandbox Code Playgroud)
我想要一种方式,所以我可以知道同步完成,所以我可以从日历中读取数据,我尝试这样做
while (ContentResolver.isSyncActive(accounts[0], "com.android.calendar")) {
System.out.println("looping: " + i);
}
readLocalCalendar();
readLocalEvents();
Run Code Online (Sandbox Code Playgroud)
但系统在同步结束前退出循环,我仍然可以在状态栏看到同步标志,所以任何帮助,所以我可以在同步完成后阅读日历事件?
谢谢
android android-widget android-emulator android-intent android-layout