我正在尝试使用我自己的accounts,AccountManger和自定义AccountAuthenticator来增强我的应用以支持多个和Account Type。我了解如何构建SyncAdapter和ContentProvider。 (我从Android reference pages)
中学到了什么但我对如何将帐户与内容提供商绑定感到困惑。
在SyncAdapter中,函数onPerformSync()
传递对触发同步适配器的Account对象的引用。这很好。但一旦进入,我该怎么处理这些信息?
@Override
public void onPerformSync(
Account account,
Bundle extras,
String authority,
ContentProviderClient provider,
SyncResult syncResult) {
Log.d(TAG, "onPerformSync");
// account??
Cursor c = provider.query("content://org.example.myapp/letters", DataContract.Letters.PROJECTION_ALL, selectionClause, selectionArgs, DataContract.Letters.SORT_ORDER_DEFAULT )
}
ContentProviders似乎不直接支持Account对象。看来我们必须通过为每个插入,更新,删除和查询添加帐户属性来自己支持它。
这样的事情:
content://org.example.myapp/letters/d0470cc1c6af4b7bab8e8cedd58d2329/123
其中:第一个UUID是帐号ID,尾随整数是记录号
这也意味着当有人从AccountManager中删除帐户时,我们必须手动处理管家代码。这可能是最令人不安的部分。
我发现这很奇怪。在我对内容提供商和同步适配器所做的所有阅读之后,您会认为其他人会想到解释如何执行此操作。这就是促使我在这里提出要求的原因。
是否有一些优雅的方式来支持帐户,使用内容提供程序和同步数据,而不必使用额外的帐户变量来插入每个插入,更新,删除和查询?
拥有帐户类型的一个优点是,当用户添加/删除帐户时,它可以清理同步适配器设置。但是如何在内容提供商内清理该帐户的内容呢?我不确定这个内务管理是否可以通过AccountManager以某种方式完成?