Получить список доступных контент-провайдеров - PullRequest
32 голосов
/ 04 января 2010

Есть ли способ программно перечислить всех доступных поставщиков контента на устройстве? Нет реального варианта использования, я просто подумал, что было бы неплохо увидеть, какие приложения, которые я установил на свой телефон, выставили провайдеров контента.

Ответы [ 5 ]

54 голосов
/ 04 января 2010

Это должно быть возможно путем вызова PackageManager.getInstalledPackages () с GET_PROVIDERS.

РЕДАКТИРОВАТЬ : пример:

    for (PackageInfo pack : getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)) {
        ProviderInfo[] providers = pack.providers;
        if (providers != null) {
            for (ProviderInfo provider : providers) {
                Log.d("Example", "provider: " + provider.authority);
            }
        }
    }
17 голосов
/ 29 мая 2013

В командной строке введите:

adb shell dumpsys | grep Provider{

Обратите внимание на открывающую скобку.Это даст вам краткий список всех провайдеров, установленных через различные пакеты.

13 голосов
/ 15 января 2011

Я использовал команду оболочки adb вот так $ adb shell dumpsys > dumpsys.txt и поиска строки поставщиков контента в выходном файле. Из этого я могу видеть список поставщиков контента в устройстве / эмуляторе.

7 голосов
/ 14 марта 2011
List<ProviderInfo> providers = getContext().getPackageManager()
    .queryContentProviders(null, 0, 0);

перечисляет всех поставщиков контента, доступных вам на этом устройстве.

Или, если вам известны имя процесса и UID провайдера, вы можете уменьшить список, указав эти два параметра. Я использовал это раньше, чтобы проверить существование моих собственных провайдеров контента, в частности тех, которые использовались в предыдущих (бесплатных или платных) установках:

List<ProviderInfo> providers = getContext().getPackageManager()
    .queryContentProviders("com.mypackage", Process.myUid(), 0);

Обратите внимание на android.os.Process.myUid(), чтобы получить идентификатор пользователя моего собственного процесса.

1 голос
/ 05 февраля 2015
List<ProviderInfo> returnList = new ArrayList<ProvderInfo>();
   for (PackageInfo pack:getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)) 
   {
    ProviderInfo[] providers = pack.providers;
   if (providers != null) 
   { 
      returnList.addAll(Arrays.asList(providers)); 
   } 
 } 
 return returnList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...