Доступ к пользовательскому поставщику контента из другого приложения - PullRequest
14 голосов
/ 19 апреля 2011

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

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

Ответы [ 3 ]

14 голосов
/ 24 января 2013

Да, можно получить доступ к поставщику нестандартного контента из другого приложения. Используя вашу терминологию, мы назовем контент-провайдера CustomCP и другое приложение AppA. (AppA - это тот, который хочет получить доступ к провайдеру). Этот подход доказал свою эффективность:

  1. Укажите желаемого поставщика контента (CustomCP) из AppA с помощью ContentProviderClient:

    Uri yourURI = Uri.parse("content://com.example.customcp/YourDatabase"); ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);

  2. Получите доступ к поставщику контента, как обычно из приложения А. Например:

    yourCursor = yourCR.query(yourURI, null, null, null, null);

    Примечание: вы должны либо заключить код в блок try / catch, либо включить «throws RemoteException», поскольку провайдер отсутствует в приложении A.

  3. Манифест CustomCP должен указывать поставщика, включать разрешенные разрешения (например, чтение и / или запись), и поставщик должен быть экспортирован. Вот пример:

    <provider
        android:name="your.package.contentprovider.YourProvider"
        android:authorities="YourAuthority"
        android:readPermission="android.permission.permRead"
        android:exported="true" >
     </provider>
    
0 голосов
/ 20 марта 2013

После создания поставщика содержимого укажите его в файле манифеста. Вы можете упомянуть контент-провайдера, используя тег. Внутри тега провайдера не забудьте упомянуть атрибуты имени и полномочий. Эта декларация должна быть ..

<provider
        android:name="pakgName.ProviderClassName"
        android:authorities="pakgName.ProviderClassName"
        android:multiprocess="true" >
    </provider>

Вот что вы упоминаете в атрибуте полномочия, который должен совпадать при попытке получить данные от провайдера.

0 голосов
/ 30 ноября 2011

в файле манифеста, убедитесь, что ваш

"provider android..>"
находится внутри вашей
"application .. /application>" 

надежды, которая помогает

...