version:3.0.7_beta
update:2020.07.07 fix:会卸载自带的可以卸载的应用,显示系统隐藏的应用, add:手动检查更新按钮
This commit is contained in:
@@ -7,7 +7,6 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageInstaller;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
@@ -19,33 +18,22 @@ import android.widget.Toast;
|
||||
|
||||
import com.mjsheng.myappstore.BuildConfig;
|
||||
import com.mjsheng.myappstore.R;
|
||||
import com.mjsheng.myappstore.utils.update.ToastTool;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import javax.crypto.interfaces.PBEKey;
|
||||
|
||||
import cn.jpush.android.api.PushNotificationBuilder;
|
||||
import rx.Observable;
|
||||
import rx.Observer;
|
||||
import rx.Subscriber;
|
||||
@@ -584,64 +572,57 @@ public class ApkUtils {
|
||||
// 查询所有已经安装的应用程序
|
||||
List<ApplicationInfo> appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的
|
||||
List<String> applicationInfos = new ArrayList<>();
|
||||
|
||||
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
|
||||
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
|
||||
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||
|
||||
// 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName
|
||||
List<ResolveInfo> resolveinfoList = pm.queryIntentActivities(resolveIntent, 0);
|
||||
Set<String> allowPackages = new HashSet();
|
||||
for (ResolveInfo resolveInfo : resolveinfoList) {
|
||||
allowPackages.add(resolveInfo.activityInfo.packageName);
|
||||
}
|
||||
|
||||
for (ApplicationInfo app : appInfos) {
|
||||
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉
|
||||
{
|
||||
// Log.e("queryFilterAppInfo", String.valueOf(app.flags));
|
||||
// Log.e("queryFilterAppInfo", String.valueOf((app.flags & mask)));
|
||||
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
|
||||
//通过flag排除系统应用,会将电话、短信也排除掉
|
||||
} else {
|
||||
applicationInfos.add(app.packageName);
|
||||
Log.e("queryFilterAppInfo", app.packageName);
|
||||
}
|
||||
// if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好
|
||||
// applicationInfos.add(app);
|
||||
// }
|
||||
}
|
||||
return applicationInfos;
|
||||
}
|
||||
|
||||
public static List<String> showAllAPP(Context context) {
|
||||
public static List<String> canremove_systemapp = new ArrayList<String>() {{
|
||||
//预置的可以卸载的系统应用,判断出来为第三方
|
||||
this.add("com.android.quicksearchbox");
|
||||
this.add("com.android.calendar");
|
||||
this.add("com.android.dreams.basic");
|
||||
this.add("com.android.musicfx");
|
||||
this.add("com.android.email");
|
||||
}};
|
||||
public static List<String> systemapp = new ArrayList<String>() {{
|
||||
//需要管控的系统应用
|
||||
this.add("com.android.gallery3d");
|
||||
this.add("com.android.deskclock");
|
||||
this.add("com.android.music");
|
||||
this.add("com.mediatek.camera");
|
||||
this.add("com.android.documentsui");
|
||||
this.add("com.android.soundrecorder");
|
||||
this.add("com.android.browser");
|
||||
}};
|
||||
|
||||
|
||||
public static void showAllAPP(Context context) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
// 查询所有已经安装的应用程序
|
||||
List<ApplicationInfo> appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的
|
||||
|
||||
List<String> packageList = new ArrayList<>();
|
||||
|
||||
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
|
||||
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
|
||||
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||
|
||||
// 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName
|
||||
List<ResolveInfo> resolveinfoList = pm.queryIntentActivities(resolveIntent, 0);
|
||||
Set<String> allowPackages = new HashSet();
|
||||
for (ResolveInfo resolveInfo : resolveinfoList) {
|
||||
allowPackages.add(resolveInfo.activityInfo.packageName);
|
||||
List<PackageInfo> packages = pm.getInstalledPackages(0);
|
||||
for (PackageInfo packageInfo : packages) {
|
||||
if (ApkUtils.canremove_systemapp.contains(packageInfo.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1
|
||||
&& !systemapp.contains(packageInfo.packageName)
|
||||
) {
|
||||
} else {
|
||||
Log.e("showAllAPP", "packageName:" + packageInfo.applicationInfo.packageName);
|
||||
pm.setApplicationEnabledSetting(packageInfo.applicationInfo.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
for (ApplicationInfo app : appInfos) {
|
||||
// if((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉
|
||||
// {
|
||||
// applicationInfos.add(app);
|
||||
// }
|
||||
// if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好
|
||||
// applicationInfos.add(app);
|
||||
// }
|
||||
// if (allowPackages.contains(app.packageName) && !Arrays.asList(excludePackageName).contains(app.packageName)) {
|
||||
// if (allowPackages.contains(app.packageName)) {
|
||||
// packageList.add(app.packageName);
|
||||
// }
|
||||
pm.setApplicationEnabledSetting(app.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
|
||||
|
||||
}
|
||||
return packageList;
|
||||
}
|
||||
|
||||
|
||||
@@ -661,4 +642,25 @@ public class ApkUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static boolean isSystemApp(Context context, String pkg) {
|
||||
try {
|
||||
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, 0);
|
||||
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
|
||||
if (pkg.equals(context.getPackageName())) {
|
||||
return true;
|
||||
} else {
|
||||
//第三方应用
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
//系统应用
|
||||
return true;
|
||||
}
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +128,8 @@ public class AppsManagerUtils {
|
||||
public static boolean isSystemApp(Context context, String pkg) {
|
||||
try {
|
||||
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, 0);
|
||||
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
|
||||
int mask = ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
|
||||
if ((packageInfo.applicationInfo.flags & mask) == 0) {
|
||||
if (pkg.equals(context.getPackageName())) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user