このタイトルはWhy does ContentResolver.requestSync not trigger a sync?ですが、同期方法はアカウント&同期設定画面には表示されません。 onPerformSync()が呼び出されていないと思います。私はデバッグしようとしましたが、エラーログは見つかりませんでした。ここに私のコードです:同期は実行できません(onPerformSyncは呼び出されません)
<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();
}
}
}
syncAdapter.xml私は
ここでそれを呼び出します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);}
たManifest.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>
私はネクサスSアンドロイド4.0でテスト。 読んでいただきありがとうございます!あなたが試すことができます
は、多分それは同じ問題だ:http://stackoverflow.com/questions/15810659/android-syncadapter-retry/16294867 – Kenumir
<アクションアンドロイド:名= "android.content.SyncAdapter" />この行を必要としています私たちのパッケージ名を与えるか、これはすべてのプロジェクトの一般的な宣言ですか? – Madhu
問題は、あなたがsync_extras_manualをfalseに設定したときに更新しないと言っているのですが、それは本当であるはずです – schwiz