2012-10-19 3 views
2

사용자가 레코드를 오프라인으로 편집/추가 할 수있는 응용 프로그램이 있으며 인터넷에 연결되면 바로 서버에 보내야합니다. 그것은 Gmail 응용 프로그램의 정확한 동작 인 것 같습니다 : 오프라인으로 이메일을 작성하고 "보내기"를 클릭하여 응용 프로그램/프로세스를 닫고 인터넷 연결이 다시되면 전자 메일을 보내는 동기화가 수행됩니다 서버에.GMail처럼 동기화하기

문제는 이미 동기화를 실행하는 SyncAdapter가있는 SyncAccount가 있다는 것입니다. ContentResolver.addPeriodicSync을 사용하여 두 번째 동기화를 추가하려면 다른 권한을 만들어야하므로 다른 데이터베이스 테이블을 사용해야합니까?

동일한 데이터베이스에 액세스하면서 서로 독립적 인 두 개의 동기화 작업을 예약 할 수 있습니까?

답변

0

문제가 해결되었습니다. 일회성 동기화를 예약하지 않고 즉시 한 번 동기화를 요청할 수 있습니다. 이 일회성 동기화에 추가 기능 목록을 제공 할 수도 있습니다.

내 솔루션은 번들에 매개 변수를 넣고 바로 어댑터의 onPerformSync 방법에 따라 내 마술을하는 것이있다.

final String ACCOUNT_NAME = "dummyAcc"; 
    final String ACCOUNT_TYPE = "dummyAccType"; 
    final String PROVIDER = "dummyProvider"; 

    Account appAccount = new Account(ACCOUNT_NAME, ACCOUNT_TYPE); 
    AccountManager accountManager = AccountManager.get(this); 
    Bundle extras = new Bundle(); 
    extras.putBoolean("magicParam", true); 
    extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); 
    ContentResolver.requestSync(appAccount, PROVIDER, extras); 

... 

@Override 
public void onPerformSync(Account account, Bundle extras, String authority, 
     ContentProviderClient provider, SyncResult syncResult) { 
    if (extras.getBoolean("magicParam")) { 
     // do magic; 
    } 
} 
관련 문제