获取可用内容提供商的列表

有没有办法以编程方式列出设备上所有可用的内容提供商 ? 没有真正的使用案例,我只是认为看看我的手机上安装了哪些应用程序已经暴露了内容提供商可能很好。

Solutions Collecting From Web of "获取可用内容提供商的列表"

应该可以通过使用GET_PROVIDERS调用PackageManager.getInstalledPackages() 。

编辑 :例如:

  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); } } } 

从命令行运行:

adb shell dumpsys | grep Provider{

注意大括号。 这将给你一个通过各种软件包安装的所有提供商的简短列表。

我使用adb shell命令,如$ adb shell dumpsys > dumpsys.txt并在输出文件中search内容提供者string。 从那我可以看到设备/模拟器中的内容提供者列表。

 List<ProviderInfo> providers = getContext().getPackageManager() .queryContentProviders(null, 0, 0); 

列出此设备上可用的所有内容提供商。

或者,如果您知道提供程序的进程名称和UID,则可以通过指定这两个参数来减less列表。 我之前用这个来检查我自己的内容提供者的存在,更具体地说是以前的(免费与付费)安装:

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

请注意android.os.Process.myUid()来获取我自己的进程的用户ID。

 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;