无帐户同步适配器

sia*_*mii 41 account rest android sync adapter

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

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

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

编辑2:我刚看了设置 - >帐户和同步下的天气和股票应用程序.您可以看到它们允许同步,但没有删除帐户按钮.另一方面,谷歌,Facebook和Skype应用程序允许同步PLUS他们有一个删除帐户按钮.这意味着天气和股票不使用账户,而谷歌,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 ???

nin*_*alf 18

正如Android Developer文档所说

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

有一篇关于创建存根验证器的文章.我意识到这个问题已经很久了,很久以前就接受了答案,但我觉得这里应该包括最近添加的官方文档.


sia*_*mii 12

我不断从这个问题收到很多通知,所以我想我会分享这些信息.这是您在没有帐户的情况下添加SyncAdapter的方法.你可以把这个onCreateMyApplication 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在我看来,调用`setMasterSyncAutomatically(true)`这是不好的做法...... (3认同)
  • 这不仅是不好的做法,而且还需要android.permission.WRITE_SYNC_SETTINGS.您不应该覆盖用户的选择以禁用同步.尤其不是主设置. (3认同)

Sha*_*ell 11

我创建了一个联系人同步适配器,我没有帐户授权和/或配置屏幕.这并不难.我不认为必须处理Android帐户的东西是一个很大的交易.

从您的教程链接引用:

坏消息是没有"库存"功能可以让您轻松地为系统提供帐户.但是,在SDK附带的同一个同步适配器示例中,您可以借用许多代码来为您提供帐户功能.除非您需要自定义凭据屏幕,否则只需进行一些小的更改即可删除com.example.android.samplesync.authenticator包中的所有代码.

所以它基本上只是来自示例的复制和粘贴,这几乎就是我做的,它工作得很好.

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

  • 您可以发布您的代码来同步没有帐户的联系人吗? (6认同)