Я пытаюсь создать класс поставщика контента в библиотеке для обмена данными между приложениями. Тогда каждое приложение может поместить что-то вроде следующего в свой манифест:
<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.
Я не могу найти никаких документов, говорящих, что я не могу этого сделать. Кто-нибудь знает какие-нибудь обходные пути?