Доступ к производителю настраиваемого контента из другого приложения
Здравствуйте, я создал приложение для Android, которое использует настраиваемый поставщик контента с именем CustomCP,
он реализует все методы, и все работает отлично, управляя данными внутри приложения,
но когда я пытаюсь получить к нему доступ из другого приложения, я продолжаю получать сообщение об ошибке "Не удалось найти
Информация о поставщике для com.example.customcp.
Я объявил своего поставщика контента в файле манифеста первого приложения как
<provider android:name="com.example.CustomCP" android:authorities="com.example.customcp"/>
Я пытаюсь вызвать провайдера во второй активности запуска приложения.
public class app2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri kUri = Uri.parse("content://com.example.customcp/key");
Cursor c = managedQuery(kUri, null, null, null, null);
}
}
Итак, вопрос прост, можно ли получить доступ к производителю контента из нескольких приложений?
Ответы
Ответ 1
Да, возможно получить доступ к производителю контента из другого приложения. Используя вашу терминологию, мы вызываем поставщика контента CustomCP и другое приложение AppA. (AppA - это тот, который хочет получить доступ к провайдеру). Этот подход доказал свою эффективность:
-
Укажите желаемого поставщика контента (CustomCP) из AppA с помощью ContentProviderClient:
Uri yourURI = Uri.parse("content://com.example.customcp/YourDatabase");
ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);
-
Доступ к поставщику контента, как обычно, из приложения А. Например:
yourCursor = yourCR.query(yourURI, null, null, null, null);
Примечание: вы должны либо заключить код в блок try/catch, либо включить "throws RemoteException", поскольку поставщик не находится в приложении A.
-
В манифесте CustomCP необходимо указать поставщика, включить разрешенные разрешения (например, читать и/или писать), а поставщик должен быть экспортирован. Вот пример:
<provider
android:name="your.package.contentprovider.YourProvider"
android:authorities="YourAuthority"
android:readPermission="android.permission.permRead"
android:exported="true" >
</provider>
Ответ 2
в файле манифеста, убедитесь, что ваш
"provider android..>"
находится внутри вашего
"application .. /application>"
надеюсь, что поможет
Ответ 3
После создания поставщика контента укажите поставщика содержимого в файле манифеста. Вы можете указать поставщика контента с помощью тега. Внутри тега поставщика не забывайте упоминать атрибуты имени и полномочий. Это выражение должно быть...
<provider
android:name="pakgName.ProviderClassName"
android:authorities="pakgName.ProviderClassName"
android:multiprocess="true" >
</provider>
Здесь вы указываете в атрибуте полномочий, который должен соответствовать, когда вы пытаетесь получить данные от поставщика.