2012-10-30 10 views
11

このタイトルは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でテスト。 読んでいただきありがとうございます!あなたが試すことができます

+0

は、多分それは同じ問題だ:http://stackoverflow.com/questions/15810659/android-syncadapter-retry/16294867 – Kenumir

+0

<アクションアンドロイド:名= "android.content.SyncAdapter" />この行を必要としています私たちのパッケージ名を与えるか、これはすべてのプロジェクトの一般的な宣言ですか? – Madhu

+0

問題は、あなたがsync_extras_manualをfalseに設定したときに更新しないと言っているのですが、それは本当であるはずです – schwiz

答えて

1

何かがある:

ContentResolver.setSyncAutomatically(account, AUTHORITY, true); 

私はisAlwaysSyncableフラグを設定しようとしましたが(それは別の問題であったかもしれないが)、それは私のために動作しませんでした。

7

このメソッドは、同様の同期が進行中であるために呼び出されないことがあります。以下のコードで確認してキャンセルできます。

if (ContentResolver.isSyncPending(yourAccount, yourAuthority) || 
    ContentResolver.isSyncActive(yourAccount, yourAuthority)) { 
    Log.i("ContentResolver", "SyncPending, canceling"); 
    ContentResolver.cancelSync(yourAccount, yourAuthority); 
} 
+0

その問題は私がそれを長年解決しました。とにかく、あなたのことに感謝します。 –

+0

誰もがこれを使う必要があります! –

-1

手動同期を強制する必要があります。

Bundle params = new Bundle(); 
params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true); 
params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); 
ContentResolver.requestSync(selectedAccount, getString(R.string.AUTHORITY), params); 
関連する問題