Android SyncAdapter с помощью учетной записи Google - PullRequest
20 голосов
/ 31 мая 2010

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

Проблема в том, что он не синхронизируется по умолчанию. И если перейти в учетную запись в «account & sync», моя учетная запись Google будет пустой - как будто нет доступных служб синхронизации.

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

  • есть ли способ добавить запись в меню «учетные записи и синхронизация», которая использует мой SyncAdapter, но использует учетную запись Google? или добавить в аккаунты Google подменю, позволяющее синхронизировать мой сервис appengine?

, если нет,

  • Есть ли способ повторно использовать AccountAuthenticator от Google из аккаунта AccountAuthenticator, который я пишу?

1 Ответ

23 голосов
/ 04 июня 2010

Получается, что у вас может быть 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", чтобы Android связал это синхронизирующее действие с вашим приложением. Если у вас есть это (вам даже не нужно делать что-то значимое, просто существовать), ваша программа может появиться на панели настроек «account & Sync» - в выбранной вами учетной записи Google.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...