Есть ли способ программно перечислить все доступные поставщики контента на устройстве? Нет реального варианта использования, я просто подумал, что может быть аккуратно видеть, какие приложения я установил на своем телефоне, которые выставили контент-провайдеров.
Получить список доступных поставщиков контента
Ответ 1
Это должно быть возможно, вызывая PackageManager.getInstalledPackages() с GET_PROVIDERS.
EDIT: пример:
    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);
            }
        }
    }
		Ответ 2
В командной строке запустите:
 adb shell dumpsys | grep Provider{
Обратите внимание на открывающую скобу. Это даст вам короткий список всех поставщиков, установленных через различные пакеты.
Ответ 3
Я использовал команду adb shell, подобную этой $ adb shell dumpsys > dumpsys.txt, и поиск строки поставщиков контента в выходном файле. Из этого я могу видеть список поставщиков контента в устройстве/эмуляторе.
Ответ 4
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(), чтобы получить свой собственный идентификатор пользователя процесса.
Ответ 5
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;