2012-02-13 5 views
8

SDK의 SimpleSyncAdapter 샘플 프로젝트 라인을 따라 SyncAdapter, AccountManager 및 private ContentProvider를 구현했습니다. 그것은 모두 잘 작동하고 있습니다.Android SyncAdapter 콜백

이제 특정 플래그가 설정된 원격 서버에서 새 행을 다운로드 한 경우 사용자에게 메시지를 표시하려고합니다. 동기화가 끝나면 SyncAdapter에서 콜백이 필요하므로 쿼리를 수행하고 작업의 메시지를 표시 할 수 있습니다. StackOverflow에 대해 몇 가지 질문을 보았지만 좋은 답변은 없습니다.

How does one listen for progress from Android SyncAdapter?은 SyncStatusObserver가 쓸모 없다고 말합니다. 사용자 mobibob은 ResultReceiver를 사용하여 동기화 스레드에서 UI에 다시 응답 할 것을 제안합니다.

How to know when sync is finished?은 SyncService의 인 텐트를 사용하는 것이 좋습니다.

How to signal sync-complete to the Android SyncManager?은 SyncResult를 사용하는 것이 좋습니다. maxpower47에 링크 된 예제 코드는 SyncResult 클래스를 사용하여 예외를보고하지만 실제로 동기화가 완료되었는지보고하지는 않습니다.

어떤 옵션이 가장 좋을지 모르겠으며 이러한 솔루션을 사용하는 예제 프로젝트를 보지 못했습니다.

+0

똑같은 위치에 - 그것을 해결할 수 있었습니까? – HGPB

답변

1

나는 이것이 오래된 질문이지만, 나도 똑같은 질문을하고 있었다. 데이터가 확인 된 경우

registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer) 

이 콜백을받을 관찰자 클래스를 등록 : 내가 특별히 내가 당신이로 로컬 데이터를 처리하고 있습니다 때문에, 좋은 솔루션으로 발견 무엇 는 컨텐트 리졸버에서 다음과 같은 방법을 사용하는 것입니다 주어진 내용에 따라 URI가 변경됩니다. 그러나 ContentProvider가 알림을 보내는 경우에만 발생할 수 있습니다. 당신이 컨텐트 프로를 통해 데이터베이스에서 수행 모든 업데이트를 들어, 컨텐트 프로는 이와 비슷한 업데이 트를 구현해야 위의 ContentObserver에 알림을받을 싶다면, 예를 들면 : 당신이 할 때 notifyForDescendents를 사용

@Override 
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { 
    // code goes here 
    this.getContext().getContentResolver().notifyChange(uri, null); 
    return 0; 
} 

것은 registerContentObserver이 될 수 있습니다 굉장히 유용하다.

1

이것은 오래된 질문이지만 지난 날에 몇 가지 조사를했는데 네트워크 요청을 처리하고 UI를 알리는 syncAdapter에 많은 사례가 없습니다.

먼저 ContentProvider와 함께 Loader를 사용하여 더 쉽게 작업 할 수 있도록해야합니다. 로더가 더 이상 컨텐츠 확인자에 등록 할 필요가 없습니다. 즉, 콘텐츠 공급자에게 전달되는 정보가 UI에 전달됩니다.

변경 사항이 없으면 어떻게됩니까? 모든 것이 최신이거나 네트워크 오류가 있습니다.

  1. 당신은 내가 기본 안드로이드 이메일 응용 프로그램을 살펴했다 BaseActivity
  2. 에 mSyncStatusObserver 검색, 응용 프로그램이 수행하는 구글 I/O와 같은 syncAdapter의 상태를들을 수 있습니다 그리고 그들은 Singleton와를 사용 callBacks.
  3. 브로드 캐스트 식별자를 사용할 수도 있고 eventBus (예 : 사각형 오토)를 사용하여 UI에 동작을 알릴 수도 있습니다.

syncAdapter에서 발생하는 이벤트에 대해 세분화되어 있기 때문에 가장 좋아합니다.

+0

Otto를 SyncAdapter에 사용하는 예가 있습니까? – toobsco42

+0

죄송하지만 저는 현재 [샘플 프로젝트] (https://github.com/sebastienrouif/notesSyncAdapter)가 있습니다. SyncHelper.java에서 오류를 잡아낼 때 이벤트 오류를 ​​보낼 수 있습니다. UI 측면에서는 일반적인 이벤트 처리입니다. – Sebastien

+0

화려한 세바스찬 !! +1 –

-2

비슷한 상황이 발생하여 SyncAdapter에 정적 Listener 인터페이스를 작성했습니다. 리스너는 활동이며 데이터를 사용할 수있을 때 필요한 작업을 수행합니다 (UI 업데이트). 이는 자동 청취 중에이 청취자가 널 (null)이고 동기화 프로세스가 자체 비즈니스를 염두에두고있을 때 시스템이 동기 어댑터를 호출 할 때도 작동합니다.

class SyncAdapter extends AbstractThreadedSyncAdapter { 

    protected static Listener uiListener = null; 
    public interface Listener { 
     public void onSync(); 
    } 
    public static void setListener(Listener l) { 
     uiListener = l; 
    } 
    public static void clearListener() { 
     uiListener = null; 
    } 
    protected void broadcastSync() { 
     if (uiListener != null) 
      uiListener.onSync(); 
    } 
    public void onPerformSync(Account account, Bundle extras, String authority, 
          ContentProviderClient provider, SyncResult syncResult) { 

     // call broadcastSync(); 
    } 

그런 다음 작업에서 SyncAdapter.Listener 인터페이스를 구현하십시오.

관련 문제