【问题标题】:Android SyncAdapter using a google account使用 google 帐户的 Android SyncAdapter
【发布时间】:2010-05-31 11:42:45
【问题描述】:

我编写了一个 SyncAdapter,它采用“com.google”帐户并与 appengine 网络服务执行同步。使用开发工具同步测试器(在模拟器上)对此进行测试,此同步似乎工作得很好。

问题是,默认情况下它不同步。转到“帐户和同步”中的帐户显示我的谷歌帐户为空白 - 好像没有可用的同步服务。

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

  • 有没有办法在使用我的 SyncAdapter 但依赖于 google 帐户的“帐户和同步”菜单中添加一个条目?或者向 google 帐户添加一个子菜单以启用我的 appengine 服务的同步?

如果没有,

  • 有没有一种方法可以在我编写的 AccountAuthenticator 中重复使用 google 的 AccountAuthenticator?

【问题讨论】:

    标签: android authentication


    【解决方案1】:

    事实证明,您可以拥有一个使用“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>
    

    在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"
    />
    

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

    作为一项额外的工作,您可能需要调用:

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

    将 account 作为您要用于同步凭据的 Account 对象。

    【讨论】:

    • setIsSyncable 方法应该放在什么类下?
    • @mikedroid:我认为该方法可以随时随地调用。如果我找不到任何可同步的谷歌帐户(如 ContentResolver.getIsSyncable 所示),我会在程序加载时调用它一次
    • 似乎无法正常工作。你使用什么权限?另外,您在 AndroidManifest.xml: 中的块似乎丢失了?
    • @Paddy:感谢您指出缺少的 XML - 它总是在答案中,只是因为缩进不够而从未显示 - 哎呀!至于权限,我的完整清单文件可以在这里找到:github.com/gfxmonk/pagefeed-android/blob/master/src/main/… - 我担心已经有一段时间了,我不记得这里实际上是什么相关的。
    • @gfxmonk 感谢您提供信息!我的问题是一个错字。因为我就是那样的白痴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2014-12-10
    相关资源
    最近更新 更多