По сути, я создал абстрактный базовый класс для каждого из моих ContentProviders и унаследовал его от каждого приложения, которое я хочу создать, переопределив путь полномочий. Итак, в моем 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 используется без каких-либо конфликтов. Таким образом, в основном используется механизм конфигурации для внедрения зависимостей.