Android SyncAdapter przy użyciu konta google

Napisałem SyncAdapter, który zajmuje " com.konto google " i wykonuje synchronizację z usługą internetową appengine. Testując to za pomocą dev tools sync tester (na emulatorze), ta synchronizacja wydaje się działać dobrze.

Problem w tym, że domyślnie nie synchronizuje się. Przejście do konta w "konta i synchronizacja" pokazuje, że moje konto google jest puste - tak, jakby nie było dostępnych usług synchronizacji.

Podejrzewam, że aby moja synchronizacja była wyświetlana w menu "konta i synchronizacja", chciałbym muszę wdrożyć własny AccountAuthenticator, który zrobiłby dokładnie to samo, co przypuszczam, że AccountAuthenticator google musi już zrobić. To nie jest ekscytująca praca i wydaje się bardzo niepotrzebna. Więc:

  • czy istnieje sposób na dodanie wpisu do menu "konta i synchronizacja", który używa mojego SyncAdapter, ale opiera się na koncie google? lub dodać podmenu do kont google, które umożliwia synchronizację usługi appengine?

Jeśli nie,

  • czy jest sposób na ponowne wykorzystanie AccountAuthenticator google z poziomu accountauthenticator, który piszę?
Author: gfxmonk, 2010-05-31

1 answers

Więc okazuje się, że można mieć syncAdapter, który używa " com.konto google" , ale wymaga to napisania pasującej Treściprovider. 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>

I w 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ępniemusi mieć ContentProvider z autorytetem " net.gfxmonk.android.pagefeed", aby Android mógł powiązać tę akcję synchronizacji z Twoją aplikacją. Gdy już to masz (nawet nie musi robić nic sensownego, po prostu istnieć), Twój program może pojawić się w panelu ustawień "konta i synchronizacja" - na wybranym koncie google.

Jako dodatkowy utwór, być może będziesz musiał zadzwonić:

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

Z kontem jako obiektem konta, którego chcesz użyć do poświadczeń synchronizacji.

 23
Author: gfxmonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 12:17:45