このタイトルをフォローしています ContentResolver.requestSync が同期をトリガーしないのはなぜですか? ただし、設定画面のアカウントと同期に同期方法が表示されません。onPerformSync()が呼び出されていないと思います。デバッグしようとしましたが、エラー ログが見つかりません。ここに私のコードがあります:
syncAdapter.xml
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/ACCOUNT_TYPE"
android:contentAuthority="@string/AUTHORITY"
android:userVisible="true"
android:isAlwaysSyncable="true"
/>
SyncService.java
public class CalendarSyncService extends Service{
private static SyncAdapterImpl sSyncAdapter = null;
private static String list_event_ids;
private static Requestor requestor;
public void onCreate(){
super.onCreate ();
if (sSyncAdapter == null)
sSyncAdapter = new SyncAdapterImpl(this);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return sSyncAdapter.getSyncAdapterBinder();
}
public class SyncAdapterImpl extends AbstractThreadedSyncAdapter {
Context context;
public SyncAdapterImpl(Context context) {
super(context, true);
// TODO Auto-generated constructor stub
this.context = context;
}
@Override
public void onPerformSync(Account arg0, Bundle arg1, String arg2,
ContentProviderClient arg3, SyncResult arg4) {
// TODO Auto-generated method stub
Log.e("thuutai", "Perform Sync Call");
try {
CalendarSyncService.performSync(context);
} catch (DOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
私はここでそれを呼びます
public void onClick(View arg0) {
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(selectedAccount, getString(R.string.AUTHORITY), params, 3600);
ContentResolver.setSyncAutomatically(selectedAccount, getString(R.string.AUTHORITY), true);
ContentResolver.requestSync(selectedAccount, getString(R.string.AUTHORITY), params);}
マニフェスト.xml
<service android:name=".service.CalendarSyncService" android:exported="true">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
Nexus S Android 4.0 でテストしました。読んでくれてありがとう!