我所做的基本上就是为每个ContentProvider创建一个抽象基类,并从中继承到我要制作的每个应用程序,覆盖授权路径。因此,在我的AbstractContentProvider中,我有:
public AbstractContentProvider() {
sURIMatcher.addURI(getAuthority(), BASE_PATH, ITEMS);
sURIMatcher.addURI(getAuthority(), BASE_PATH + "/#", ITEM_ID);
}
protected abstract String getAuthority();
然后在每个子类中我有:
private static final String AUTHORITY = "my.package.app1.ContentProvider";
@Override
protected String getAuthority() {
return AUTHORITY;
}
在 AndroidManifest 中,我使用以下方式进行注册:
<provider
android:name="my.package.app1.ContentProvider"
android:authorities="my.package.app1.ContentProvider">
</provider>
现在的问题是,我希望在通用(库)代码中访问这些内容提供程序,而不知道应用程序特定的类。为此,我在我的strings.xml中定义一个字符串,并为每个应用程序覆盖它。然后我可以使用:
Uri.parse(getString(R.string.contentProviderUri))
每个应用程序都使用正确的ContentProvider而没有任何冲突。因此基本上是使用依赖注入的配置机制。