Postępuję zgodnie z tytułem Why does ContentResolver.requestSync not trigger a sync?, ale metoda synchronizacji nie jest wyświetlana na ekranie Konto & Synchronizacja w ustawieniach. Myślę, że onPerformSync() nie jest wywoływana. Próbuję debugować, ale nie znaleziono dziennika błędów. Oto mój kod:Nie można wykonać synchronizacji (funkcja onPerformSync nie jest wywoływana)
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();
}
}
}
ja to nazywam tu
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>
I badane w Nexus S Androida 4.0. Dziękujemy za lekturę!
może to jest ten sam problem: http://stackoverflow.com/questions/15810659/android-syncadapter-retry/16294867 – Kenumir
problem polega na tym, że nie aktualizujesz po ustawieniu sync_extras_manual na false, to powinno być prawdą – schwiz