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

2sbarzqh  于 2023-06-20  发布在  Android
关注(0)|答案(6)|浏览(104)

有没有办法以编程方式列出设备上所有可用的content providers?没有真实的的用例,我只是觉得看看我在手机上安装了哪些暴露了内容提供商的应用程序可能会很整洁。

e0bqpujr

e0bqpujr1#

通过使用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);
        }
    }
}
esbemjvw

esbemjvw2#

在命令行中运行:
adb shell dumpsys | grep Provider{
注意左大括号。这将为您提供通过各种软件包安装的所有提供程序的简短列表。

e5njpo68

e5njpo683#

我使用adb shell命令,如$ adb shell dumpsys > dumpsys.txt,并在输出文件中搜索内容提供程序字符串。从那里我可以看到设备/模拟器中的内容提供商列表。

sirbozc5

sirbozc54#

注册内容提供商的列表可以通过以下方式收集:
adb shell dumpsys package providers
在Android 8.1 Oreo上测试

wko9yo5t

wko9yo5t5#

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()以获取我自己的进程的用户ID。

bnl4lu3b

bnl4lu3b6#

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;

相关问题