У меня есть список приложений, к которым вы можете получить доступ через Google Play. для любого приложения у меня есть массив JSON, подобный этому;
{
"packageName": "com.whatsapp",
"name": "WhatsApp",
"iconUrl": "https://lh3.googleusercontent.com/bYtqbOcTYOlgc6gqZ2rwb8lptHuwlNE75zYJu6Bn076-hTmvd96HH-6v7S0YUAAJXoJN\u003ds180",
"price": "0",
"ratingValue": 4.3,
"ratingCount": 107579089,
"downloads": "5,000,000,000+",
"publishDate": {
"year": 2020,
"month": 3,
"day": 18
},
"version": "2.20.89",
"category": "COMMUNICATION",
"developerName": "WhatsApp Inc.",
"developerEmail": "android@support.whatsapp.com",
"developerAddress": "1601 Willow Road Menlo Park, CA 94025"
}
Я могу отсортировать приложение по именам в recyclerview, оно относится к классу Utils и работает хорошо;
public static void sortByName(List<AppModel> list) {
Collections.sort(list, (o1, o2) -> o1.getName().compareTo(o2.getName()));
}
Более того, с помощью моего класса AppModel я могу получить packagaName для каждого приложения, я хочу отсортировать эти приложения, если оно установлено на устройстве или нет, а именно, если есть 20 приложений, и если я установил 3 из них, я хочу сначала показать эти 3 приложения в переработке.
Я пробовал этот метод, но он не работал;
private static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
public static void sortByDeviceInstallation(Context context, List<AppModel> list) {
List<AppModel> installedApps = new ArrayList<>();
List<AppModel> otherApps = new ArrayList<>();
for (AppModel app : list) {
if (isAppInstalled(context, app.getPackageName())) {
installedApps.add(app);
} else {
otherApps.add(app);
}
}
Collections.sort(installedApps, (o1, o2) -> o1.getName().compareTo(o2.getName()));
Collections.sort(otherApps, (o1, o2) -> o1.getName().compareTo(o2.getName()));
installedApps.addAll(otherApps);
}
и использовался в моем фрагменте;
SortData.sortByDeviceInstallation(getActivity(), list);