我正在尝试在库中存在一个内容提供程序类,用于在应用程序之间共享数据。然后每个应用程序可以在其清单中添加如下内容:
<provider android:name="com.pkg.lib.ContentProviderExtension" android:authorities="com.somecommonprefix.appnamecontentprovidername />
然后我循环遍历所有内容提供商,以使匹配的内容提供商获得匹配的前缀。
然后我可以查询其中任何一个来获取/插入数据。
注意:当我不使用库并且在其自己的命名空间中每个应用程序具有单独的ContentProvider类时,我没有看到任何问题。
当我将逻辑移动到库中的类时,列表中的第一个内容提供程序按预期工作,但对其他提供程序的所有后续查询都会命中传递给查询方法的第一个上下文提供程序。我知道它是列表中的第一个,因为我在列表中卸载了以前的应用程序并看到了相同的行为。
实施例: 我首先查询生活在app1中的内容提供者:
Uri uri = Uri.parse("content://somecommonprefix.app1/data");
Cursor cursor = managedQuery(uri, null, mode, null, null);
当我去app2的内容提供商时:
Uri uri = Uri.parse("content://somecommonprefix.app2/data");
Cursor cursor = managedQuery(uri, null, mode, null, null);
它会再次击中app1。当使用getContentResolver()。query(...)以及
时,我得到相同的行为我正在测试Galaxy S II。
我找不到任何文件说我不能这样做。有没有人知道任何变通方法?