在ContentProvider

时间:2018-02-02 14:07:12

标签: android android-contentprovider android-syncadapter

我正在尝试使用我自己的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以某种方式完成?

0 个答案:

没有答案