use*_*143 0 android android-widget android-emulator android-intent android-layout
我试图使用此代码以编程方式启动日历同步
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)
但系统在同步结束前退出循环,我仍然可以在状态栏看到同步标志,所以任何帮助,所以我可以在同步完成后阅读日历事件?
谢谢
pab*_*sco 10
另一种选择是注册一个广播接收器,告诉你同步完成的时间如下:
public class UpdateableActivity extends Activity {
public static final String ACTION_FINISHED_SYNC = "your.package.ACTION_FINISHED_SYNC";
private static IntentFilter syncIntentFilter = new IntentFilter(ACTION_FINISHED_SYNC);
private BroadcastReceiver syncBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// update your views
}
};
@Override
protected void onResume() {
super.onResume();
// register for sync
registerReceiver(syncBroadcastReceiver, syncIntentFilter);
// do your resuming magic
}
@Override
protected void onPause() {
unregisterReceiver(syncBroadcastReceiver);
super.onPause();
}
}
Run Code Online (Sandbox Code Playgroud)
在SyncAdapter内部完成后使用:
getContext().sendBroadcast(new Intent(UpdateableActivity.ACTION_FINISHED_SYNC));
Run Code Online (Sandbox Code Playgroud)
您也可以在启动或更新同步状态时使用它;)
更新:更新代码以避免泄漏并确保活动仍处于活动状态(onResume/onPause)
归档时间: |
|
查看次数: |
4796 次 |
最近记录: |