1.原理
主要根据 AndroidManifest.xml 中有无 android:name=”android.intent.category.LAUNCHER 进行判断。例如三星健康APP的 com.samsung.android.gearfit2plugin 是没有界面的,纯后台运行。
public static boolean hasLauncherEntry(Context mContext, String pkgName) {
Intent launchIntent = new Intent(Intent.ACTION_MAIN, null)
.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> intents = mContext.getPackageManager().queryIntentActivities(
launchIntent, PackageManager.GET_DISABLED_COMPONENTS);
for (int j = 0; j < intents.size(); j++) {
String intentPackageName = intents.get(j).activityInfo.packageName;
if (pkgName.equals(intentPackageName)) {
return true;
}
}
return false;
}
public static boolean hasLauncherEntry(String pkgName, List<ResolveInfo> intents) {
for (int j = 0; j < intents.size(); j++) {
String intentPackageName = intents.get(j).activityInfo.packageName;
if (pkgName.equals(intentPackageName)) {
return true;
}
}
return false;
}