2010-05-31 19 views
20

Napisałem SyncAdapter, który ma konto "com.google" i wykonuje synchronizację z usługą internetową appengine. Testowanie tego za pomocą narzędzia testującego narzędzia synchronizacji (na emulatorze) powoduje, że ta synchronizacja działa dobrze.Android SyncAdapter przy użyciu konta google

Problem polega na tym, że domyślnie nie jest ona synchronizowana. I przejście do konta w "kontach & sync" pokazuje, że moje konto Google jest puste - tak jakby nie było dostępnych usług synchronizacji.

Podejrzewam, że w celu uzyskania pokazany mój synchronizacji w „Rachunki & sync” menu, to trzeba zaimplementować własną AccountAuthenticator które robią dokładnie to samo, co przypuszczam Google'a AccountAuthenticator musi już robić. To nie jest ekscytująca praca i wydaje się bardzo niepotrzebna. Więc:

  • czy istnieje sposób, aby dodać wpis do „Konta & SYNC” menu, który używa mojego SyncAdapter ale opiera się na konto Google? lub dodać podmenu do kont Google, które umożliwia synchronizację mojej usługi aplikacji?

jeśli nie,

  • czy istnieje sposób mogę ponownego wykorzystania AccountAuthenticator Google z poziomu AccountAuthenticator piszę?

Odpowiedz

22

Okazuje się, że możesz mieć moduł syncAdapter, który używa konta "com.google", ale wymaga to napisania odpowiedniego dostawcy treści. Na przykład, w AndroidManifest.xml:

<service android:name=".sync.SyncAdapterService" android:exported="true" android:process=":contacts"> 
    <intent-filter> 
    <action android:name="android.content.SyncAdapter" /> 
    </intent-filter> 
    <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> 
</service> 

aw syncadapter.xml:

<?xml version="1.0" encoding="utf-8"?> 
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" 
    android:contentAuthority="net.gfxmonk.android.pagefeed" 
    android:accountType="com.google" 
    android:supportsUploading="false" 
    android:userVisible="true" 
/> 

Następnie koniecznością mają ContentProvider z uprawnieniem "net.gfxmonk.android.pagefeed" w celu android, aby powiązać tę synchronizację z twoją aplikacją. Gdy już to zrobisz (nawet nie musisz robić nic sensownego, po prostu istniejesz), Twój program może pojawić się w panelu "Konta & Sync" - na wybranym koncie Google.

Jako dodatkowy kawałek pracy, być może trzeba zadzwonić:

ContentResolver.setIsSyncable(account, "net.gfxmonk.android.pagefeed", 1) 

z konta jako przedmiotu konto, które chcesz użyć do poświadczenia synchronizacji.

+0

Cudowna, właśnie to, czego potrzebowałem, dzięki! – plouh

+0

gdzie umieścić tę metodę setIsSyncable w jakiej klasie? – Mikey

+0

@mikedroid: Myślę, że ta metoda może zostać wywołana w dowolnym momencie, z dowolnego miejsca. Raz wywołuję program, jeśli nie mogę znaleźć kont Google, które są zsynchronizowane (jak wskazuje ContentResolver.getIsSyncable). – gfxmonk

Powiązane problemy