Android SyncAdapter使用谷歌帐户

gfx*_*onk 20 authentication android

我编写了一个SyncAdapter,它接受"com.google"帐户并与appengine Web服务进行同步.使用开发工具同步测试器(在模拟器上)对此进行测试,此同步似乎正常工作.

问题是,它默认不同步.在"帐户和同步"中转到帐户会显示我的Google帐户为空白 - 就好像没有可用的同步服务一样.

我怀疑为了让我的同步显示在"帐户和同步"菜单中,我需要实现我自己的AccountAuthenticator,这与我认为谷歌的AccountAuthenticator必须已经做的完全相同.这不是一项令人兴奋的工作,而且似乎非常不必要.所以:

  • 有没有办法在使用我的SyncAdapter的"帐户和同步"菜单中添加条目但依赖于Google帐户?或者为谷歌帐户添加一个子菜单,以便同步我的appengine服务?

如果不,

  • 有没有办法可以在我写的AccountAuthenticator中重新使用谷歌的AccountAuthenticator?

gfx*_*onk 23

因此,事实证明您可以使用"com.google"帐户的syncAdapter,但这需要您编写匹配的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>
Run Code Online (Sandbox Code Playgroud)

并在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"
/>
Run Code Online (Sandbox Code Playgroud)

然后,您必须拥有一个具有权限"net.gfxmonk.android.pagefeed"的ContentProvider,以便android将该同步操作与您的应用程序相关联.一旦你有这个(它甚至不需要做任何有意义的事情,只是存在),你的程序可以出现在"帐户和同步"设置面板内 - 在你选择的谷歌帐户中.

作为额外的工作,您可能需要致电:

ContentResolver.setIsSyncable(account, "net.gfxmonk.android.pagefeed", 1)
Run Code Online (Sandbox Code Playgroud)

将帐户作为要用于同步凭据的帐户对象.