2016-01-08 4 views
2

Попытка настроить адаптер/службу синхронизации для моего поставщика контента. Поставщик контента отлично работает, способный хранить данные без проблем.Android syncadapter onPerformSync не называется

У меня есть наблюдатель контента, который зарегистрирован в моем распознавателе контента, и метод onChange вызывается после изменения данных.

Но в журналах ничего не появляется после вызова observer.onИзменить. В observer.onChange я делаю вызов contentResolver.requestSync, но метод onPerformSync в моем адаптере синхронизации не вызывается.

Идеи?

syncadapter.xml

<sync-adapter 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:contentAuthority="....contentproviderexample.provider" 
    android:accountType="....contentproviderexample" 
    android:userVisible="false" 
    android:supportsUploading="false" 
    android:allowParallelSyncs="false" 
    android:isAlwaysSyncable="true"/> 

authenticator.xml

<account-authenticator 
    android:label="@string/app_name" 
    android:smallIcon="@mipmap/ic_launcher" 
    android:icon="@mipmap/ic_launcher" 
    android:accountType="....contentproviderexample" 
    xmlns:android="http://schemas.android.com/apk/res/android"/> 

наблюдатель OnChange:

@Override 
     public void onChange(boolean selfChange, Uri uri) { 
      Log.d(PERSON_OBSERVER_TAG, "onChange: Calling requestSync"); 
      contentResolver.requestSync(newAccount, PersonContract.CONTENT_AUTHORITY, Bundle.EMPTY); 
     } 

манифеста:

<service android:name=".datasync.AuthenticatorService"> 
      <intent-filter> 
       <action android:name="android.accounts.AccountAuthenticator"></action> 
      </intent-filter> 
      <meta-data 
       android:name="android.accounts.AccountAuthenticator" 
       android:resource="@xml/authenticator"/> 
     </service> 

     <service android:name=".datasync.SyncService" 
      android:exported="true" 
      android:process=":sync"> 

      <intent-filter> 
       <action android:name="android.content.SyncAdapter"/> 
      </intent-filter> 
      <meta-data 
       android:name="android.content.SyncAdapter" 
       android:resource="@xml/syncadapter"> 

      </meta-data> 
     </service> 
+0

Поместите точку отладки в функцию onChange и, во-первых, убедитесь, что вызов выполняется. Если да, мы можем смотреть в будущее. Общая ошибка – Msk

ответ

6

Удаляя следующее, все работает отлично:

android:process=":sync" 

Удален что от конфигурации SyncService и метод onPerformSync вызываются после того, как и обновление к провайдеру контента.

благодаря

+1

Это трюк, это означает, что вы вызываете фоновое обслуживание, но хорошее решение или патч. –

6

Как SyncService работает в своем собственном процессе, который отличается от вашего приложения, как это определено андроида: процесс = «: синхронизация», журналы не появляются. Хотя SyncAdapter запускается.

Для просмотра журналов вместо «показывать только выбранное приложение» выберите «нет фильтров» в logcat.

Вам не нужно удалять андроид: process = ": sync".