我想列出所有使用互联网的应用程序,我从应用程序WireGuard中看到此功能,这就是它的作用(链接到代码):
val packageInfos = getPackagesHoldingPermissions(pm, arrayOf(Manifest.permission.INTERNET))
private fun getPackagesHoldingPermissions(pm: PackageManager, permissions: Array<String>): List<PackageInfo> {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
pm.getPackagesHoldingPermissions(permissions, PackageInfoFlags.of(0L))
} else {
@Suppress("DEPRECATION")
pm.getPackagesHoldingPermissions(permissions, 0)
}
}
它显示所有应用程序,包括非系统应用程序,例如whatsapp或任何第三方应用程序。
然后我在我的应用程序中尝试了这段代码,但它只显示“com.android.x”和“com.google.x”等应用程序,根本没有非系统应用程序。我以为可能是权限造成的,我把WireGuard的Manifest.xml里的所有权限都删掉了,依然有效,所以我觉得不是权限造成的,但是这是为什么呢?
WireGuard 具有:
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent>
</queries>
在其清单中,解决包可见性。我猜你不会。