package com.by_syk.lib.nanoiconpack.util; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by By_syk on 2017-07-06. */ public class InstalledAppReader { private static InstalledAppReader instance; @NonNull private List<Bean> dataList = new ArrayList<>(); private InstalledAppReader(@NonNull PackageManager packageManager) { init(packageManager); } private void init(@NonNull PackageManager packageManager) { try { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> list = packageManager.queryIntentActivities(mainIntent, 0); for (ResolveInfo resolveInfo : list) { dataList.add(new Bean(resolveInfo.loadLabel(packageManager).toString(), resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name)); } } catch (Exception e) { e.printStackTrace(); } } @NonNull public List<Bean> getDataList() { return dataList; } @NonNull public Set<String> getComponentSet() { Set<String> set = new HashSet<>(dataList.size()); for (Bean bean : dataList) { set.add(bean.getPkg() + "/" + bean.getLauncher()); } return set; } @NonNull public Map<String, String> getComponentLabelMap() { Map<String, String> map = new HashMap<>(dataList.size()); for (Bean bean : dataList) { map.put(bean.getPkg() + "/" + bean.getLauncher(), bean.getLabel()); } return map; } @Nullable public String getLabel(@NonNull String component) { for (Bean bean : dataList) { if (component.equals(bean.getPkg() + "/" + bean.getLauncher())) { return bean.getLabel(); } } return null; } public static InstalledAppReader getInstance(@NonNull PackageManager packageManager) { if (instance == null) { synchronized (InstalledAppReader.class) { if (instance == null) { instance = new InstalledAppReader(packageManager); } } } return instance; } public class Bean { @Nullable private String label; @NonNull private String pkg; @NonNull private String launcher; public Bean(@Nullable String label, @NonNull String pkg, @NonNull String launcher) { this.label = label; this.pkg = pkg; this.launcher = launcher; } @Nullable public String getLabel() { return label; } @NonNull public String getPkg() { return pkg; } @NonNull public String getLauncher() { return launcher; } } }