Подтвердить что ты не робот

Android SyncAdapter с помощью учетной записи google

Я написал SyncAdapter, который берет учетную запись "com.google" и выполняет синхронизацию с веб-службой appengine. Тестируя это с помощью тестера синхронизации инструментов dev (на эмуляторе), эта синхронизация работает очень хорошо.

Проблема заключается в том, что по умолчанию она не синхронизируется. И переход на учетную запись в "учетных записях и синхронизации" показывает, что моя учетная запись google пуста - как будто нет доступных служб синхронизации.

Я подозреваю, что для того, чтобы получить мою синхронизацию, показанную в меню "учетные записи и синхронизация", мне нужно будет реализовать собственный AccountAuthenticator, который будет делать то же самое, что и я, предположительно, для Google AccountAuthenticator. Это не очень увлекательная работа, и это кажется очень ненужным. Итак:

  • Есть ли способ добавить запись в меню "учетные записи и синхронизация", в котором используется мой SyncAdapter, но полагается на учетную запись google? или добавить подменю в учетные записи google, которые позволяют синхронизировать мою службу appengine?

если нет,

  • Есть ли способ, которым я могу повторно использовать аккаунт Google AccountAuthenticator из созданного вами AccountAuthenticator?
4b9b3361

Ответ 1

Итак, получается, что у вас может быть syncAdapter, который использует учетную запись "com.google", но для этого требуется написать соответствующий ContentProvider. Например, в 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>

и в файле 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"
/>

Затем у вас должен быть ContentProvider с полномочиями "net.gfxmonk.android.pagefeed", чтобы андроид мог связать это действие синхронизации с вашим приложением. После того, как вы это сделаете (даже не нужно делать ничего значимого, просто существует), ваша программа может появиться внутри панели настроек "учетные записи и синхронизация" - в выбранной вами учетной записи google.

В качестве дополнительной части работы вам может потребоваться позвонить:

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

с учетной записью как объект Account, который вы хотите использовать для своих учетных данных синхронизации.