我正在实施SyncAdapter
,我需要在一天内同步几次,但我还需要onPerformSync
在午夜触发同步。
ContentResolver.setIsSyncable(account, URIBuilder.AUTHORITY, 1);
Bundle extras = new Bundle();
extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
extras.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
ContentResolver.addPeriodicSync(account,
URIBuilder.AUTHORITY,
extras, 15000);
ContentResolver.setSyncAutomatically(account, URIBuilder.AUTHORITY, true);
ContentResolver.requestSync(account, URIBuilder.AUTHORITY, extras);
答案 0 :(得分:1)
是的,你可以。使用GCM;一旦服务器数据发生变化,服务器将发送已更改内容的推送通知。或者你可以使用AlarmManager;
Intent intent = new Intent(context,
MyBoradcastReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(context, uid, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context
.getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
在BroadcastReceiver中
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
TriggerRefresh();
}
};
public static void TriggerRefresh() {
Bundle b = new Bundle();
// Disable sync backoff and ignore sync preferences. In other
// words...perform sync NOW!
b.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
b.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
ContentResolver.requestSync(LNTAccountService.GetAccount(), // Sync
// account
CONTENT_AUTHORITY, // Content authority
b); // Extras
}