有没有办法以编程方式列出设备上所有可用的content providers?没有真实的的用例,我只是觉得看看我在手机上安装了哪些暴露了内容提供商的应用程序可能会很整洁。
e0bqpujr1#
通过使用GET_PROVIDERS调用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); } } }
esbemjvw2#
在命令行中运行:adb shell dumpsys | grep Provider{注意左大括号。这将为您提供通过各种软件包安装的所有提供程序的简短列表。
adb shell dumpsys | grep Provider{
e5njpo683#
我使用adb shell命令,如$ adb shell dumpsys > dumpsys.txt,并在输出文件中搜索内容提供程序字符串。从那里我可以看到设备/模拟器中的内容提供商列表。
$ adb shell dumpsys > dumpsys.txt
sirbozc54#
注册内容提供商的列表可以通过以下方式收集:adb shell dumpsys package providers在Android 8.1 Oreo上测试
adb shell dumpsys package providers
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。
android.os.Process.myUid()
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;
6条答案
按热度按时间e0bqpujr1#
通过使用
GET_PROVIDERS
调用PackageManager.getInstalledPackages()应该可以实现。编辑:示例:
esbemjvw2#
在命令行中运行:
adb shell dumpsys | grep Provider{
注意左大括号。这将为您提供通过各种软件包安装的所有提供程序的简短列表。
e5njpo683#
我使用adb shell命令,如
$ adb shell dumpsys > dumpsys.txt
,并在输出文件中搜索内容提供程序字符串。从那里我可以看到设备/模拟器中的内容提供商列表。sirbozc54#
注册内容提供商的列表可以通过以下方式收集:
adb shell dumpsys package providers
在Android 8.1 Oreo上测试
wko9yo5t5#
列出此设备上您可用的所有内容提供程序。
或者,如果您知道提供程序的进程名和UID,则可以通过指定这两个参数来缩减列表。我以前用它来检查我自己的内容提供商的存在,更具体地说,是以前的内容提供商(免费与免费)。付费)安装:
注意
android.os.Process.myUid()
以获取我自己的进程的用户ID。bnl4lu3b6#