Доступ к производителю настраиваемого контента из другого приложения

Здравствуйте, я создал приложение для 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>

Здесь вы указываете в атрибуте полномочий, который должен соответствовать, когда вы пытаетесь получить данные от поставщика.