无帐户同步适配器

时间:2011-02-28 18:55:53

标签: android rest adapter sync account

我需要从我的应用程序通过云获取一些数据。我在RESTful安卓应用程序@ http://www.youtube.com/watch?v=xHXn3Kg2IQE&t=43m58s上观看了谷歌IO视频。它建议在最终幻灯片中使用SyncAdapter与Android系统集成。

后来我了解到必须使用帐户来实现SyncAdapter。我的应用不使用帐户。用户无需注册即可自由下载数据。我还可以使用SyncAdapter吗?我可以使用股票虚拟账户吗?

编辑:我的应用程序确实有一个内容提供商,所以这不是问题

Edit2:我刚看了设置下的天气和股票应用程序 - >账户&同步。您可以看到它们允许同步,但没有删除帐户按钮。另一方面,谷歌,Facebook和Skype应用程序允许同步PLUS他们有一个删除帐户按钮。这意味着天气和股票不使用账户,而Google,Facebook和Skype则使用账户。

我发现@ http://ericmiles.wordpress.com/2010/09/22/connecting-the-dots-with-android-syncadapter/和@ http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/的教程说必须有一个帐户才能使用同步适配器。 :S ???

3 个答案:

答案 0 :(得分:18)

正如Android开发者文档所说

  

即使您的应用不使用帐户,您仍需要提供身份验证器组件。如果不使用帐户或服务器登录,则忽略验证者处理的信息,因此您可以提供包含存根方法实现的验证器组件。您还需要提供一个绑定服务,允许同步适配器框架调用验证器的方法。

Creating a Stub Authenticator上有一篇完整的文章。我意识到这个问题已经很久了,很久以前就接受了答案,但我觉得这里应该包含最新的官方文档。

答案 1 :(得分:12)

我不断收到这个问题的大量通知,所以我想我会分享这些信息。这是您在没有帐户的情况下添加SyncAdapter的方法。您可以将其放在onCreate MyApplication extends Application课程中。这假设您已经实施了SyncAdapterContentProvider。您可以按照问题中列出的教程进行操作。

final String ACCOUNT_NAME = "MyApp";
final String ACCOUNT_TYPE = "com.myapp.account";
final String PROVIDER = "com.myapp.provider";

Account appAccount = new Account(ACCOUNT_NAME,ACCOUNT_TYPE);
AccountManager accountManager = AccountManager.get(getApplicationContext());
if (accountManager.addAccountExplicitly(appAccount, null, null)) {
   ContentResolver.setIsSyncable(appAccount, PROVIDER, 1);
   ContentResolver.setMasterSyncAutomatically(true);
   ContentResolver.setSyncAutomatically(appAccount, PROVIDER, true);
}

RES / XML / syncadapter.xml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="@string/provider"
    android:accountType="@string/account_type"  
    android:userVisible="true"  
    android:supportsUploading="true"
/>

RES / XML / authenticator.xml

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/account_type"
    android:icon="@drawable/app_icon"
    android:smallIcon="@drawable/app_icon"
    android:label="@string/app_label"
/>

答案 2 :(得分:11)

我创建了一个联系人同步适配器,我没有帐户授权和/或配置屏幕。这并不难。我不认为必须处理Android帐户的事情就是这么多。

从您的教程链接中引用:

  

坏消息是没有   “股票”功能给你一个   简单的方法来提供帐户   系统。但是,在同一个Sync中   附带的适配器示例   SDK有很多代码可以   借用给你账户   功能。除非你想要一个   自定义凭据屏幕,您可以   抢劫中的所有代码   com.example.android.samplesync.authenticator   包装只有一些小的改动。

所以它基本上只是来自示例的复制和粘贴,这几乎就是我所做的,它运行良好。

我不确定,但所有没有“删除帐户”的适配器似乎都是我所看到的所有设备上的内置ROM适配器。我不确定你是否担心它。