Ваш текущий код позволяет вам только выбирать все установленные приложения и фильтровать их для системных приложений.
Если вы хотите отфильтровать приложения, использующие подключение к Интернету, вам необходимо проверить разрешение: android.permission.INTERNET
.
Для этого вы не можете просто использовать:
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
Вам придется использовать:
List<PackageInfo> packs = getPackageManager().getInstalledPackages(PackageManager.GET_PERMISSIONS);
Включение этого флага позволяет вам смотреть вразрешения, которые используются для приложений, которые вы выбираете.
Впоследствии, аналогично тому, что вы делаете в настоящее время, вам придется перебирать каждый из элементов PackageInfo
и проверять наличие разрешения ИНТЕРНЕТ.
private boolean usesInternet(PackageInfo pInfo) {
if(pInfo.requestedPermissions != null) {
for(String i : pInfo.requestedPermissions)
if(i.equals(Manifest.permission.INTERNET)
return true;
}
return false;
}
Наконец, вы можете добавить использование этого метода в своем фильтрующем операторе if, например так:
for(PackageInfo p : packs){
if(!isSystemPackage(p)){
if(usesInternet(p)){
String appName = p.applicationInfo.loadLabel(getPackageManager()).toString();
Drawable icon = p.applicationInfo.loadIcon(getPackageManager());
List.add(new AppList(appName, icon));
}
}
}
С этим вы будете сначала проверять, является ли приложениеСистемное приложение или нет.Если это не так, то он проверит, является ли разрешение ИНТЕРНЕТ одним из объявленных разрешений в приложении.Если это так, то вы добавляете это приложение в свой список.