Android工具类---前后台判定、App卸载、安装、分享工具类

    xiaoxiao2026-08-27  0

    功能简介:

        安装App installApp

        卸载指定包名的App uninstallApp     获取当前App信息 getAppInfo     获取所有已安装App信息 getAllAppsInfo     根据包名判断App是否安装 isInstallApp     打开指定包名的App openAppByPackageName     打开指定包名的App应用信息界面 openAppInfo     可用来做App信息分享 shareAppInfo

        判断当前App处于前台还是后台 isApplicationBackground

    代码:

    import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.net.Uri; import java.io.File; import java.util.ArrayList; import java.util.List; /** * 类描述: * Created by lizhenya on 16/8/16. */ public class AppUtils { private AppUtils() { throw new UnsupportedOperationException("can not be instantiated!"); } /** * 方法描述:根据路径安装App * * @param context 上下文 * @param filePath 文件路径 */ public static void installApp(Context context, String filePath) { installApp(context, new File(filePath)); } /** * 方法描述:根据文件安装App * * @param context 上下文 * @param file 文件 */ public static void installApp(Context context, File file) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } /** * 方法描述:卸载指定包名的App * * @param context 上下文 * @param packageName 包名 */ public void uninstallApp(Context context, String packageName) { Intent intent = new Intent(Intent.ACTION_DELETE); intent.setData(Uri.parse("package:" + packageName)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } /** * 封装App信息的Bean类 */ public static class AppInfo { private String name; private Drawable icon; private String packageName; private String versionName; private int versionCode; private boolean isSD; private boolean isUser; public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public boolean isSD() { return isSD; } public void setSD(boolean SD) { isSD = SD; } public boolean isUser() { return isUser; } public void setUser(boolean user) { isUser = user; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackageName() { return packageName; } public void setPackageName(String packagName) { this.packageName = packagName; } public int getVersionCode() { return versionCode; } public void setVersionCode(int versionCode) { this.versionCode = versionCode; } public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } /** * @param name 名称 * @param icon 图标 * @param packageName 包名 * @param versionName 版本号 * @param versionCode 版本Code * @param isSD 是否安装在SD卡 * @param isUser 是否是用户程序 */ public AppInfo(String name, Drawable icon, String packageName, String versionName, int versionCode, boolean isSD, boolean isUser) { this.setName(name); this.setIcon(icon); this.setPackageName(packageName); this.setVersionName(versionName); this.setVersionCode(versionCode); this.setSD(isSD); this.setUser(isUser); } } /** * 方法描述:获取当前App信息AppInfo(名称,图标,包名,版本号,版本Code,是否安装在SD卡,是否是用户程序) * * @param context 上下文 * @return 当前应用的AppInfo */ public static AppInfo getAppInfo(Context context) { PackageManager pm = context.getPackageManager(); PackageInfo pi = null; try { pi = pm.getPackageInfo(context.getApplicationContext().getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return pi != null ? getBean(pm, pi) : null; } /** * 方法描述:得到AppInfo的Bean * * @param pm 包的管理 * @param pi 包的信息 * @return AppInfo类 */ private static AppInfo getBean(PackageManager pm, PackageInfo pi) { ApplicationInfo ai = pi.applicationInfo; String name = ai.loadLabel(pm).toString(); Drawable icon = ai.loadIcon(pm); String packageName = pi.packageName; String versionName = pi.versionName; int versionCode = pi.versionCode; boolean isSD = (ApplicationInfo.FLAG_SYSTEM & ai.flags) != ApplicationInfo.FLAG_SYSTEM; boolean isUser = (ApplicationInfo.FLAG_SYSTEM & ai.flags) != ApplicationInfo.FLAG_SYSTEM; return new AppInfo(name, icon, packageName, versionName, versionCode, isSD, isUser); } /** * 方法描述:获取所有已安装App信息 * AppInfo(名称,图标,包名,版本号,版本Code,是否安装在SD卡,是否是用户程序) * <p>依赖上面的getBean方法 * * @param context 上下文 * @return 所有已安装的AppInfo列表 */ public static List<AppInfo> getAllAppsInfo(Context context) { List<AppInfo> list = new ArrayList<>(); PackageManager pm = context.getPackageManager(); // 获取系统中安装的所有软件信息 List<PackageInfo> installedPackages = pm.getInstalledPackages(0); for (PackageInfo pi : installedPackages) { if (pi != null) { list.add(getBean(pm, pi)); } } return list; } /** * 方法描述:根据包名获取意图 * * @param context 上下文 * @param packageName 包名 * @return 意图 */ private static Intent getIntentByPackageName(Context context, String packageName) { return context.getPackageManager().getLaunchIntentForPackage(packageName); } /** * 方法描述:根据包名判断App是否安装 * * @param context 上下文 * @param packageName 包名 * @return true: 已安装<br>false: 未安装 */ public static boolean isInstallApp(Context context, String packageName) { return getIntentByPackageName(context, packageName) != null; } /** * 方法描述:打开指定包名的App * * @param context 上下文 * @param packageName 包名 * @return true: 打开成功<br>false: 打开失败 */ public static boolean openAppByPackageName(Context context, String packageName) { Intent intent = getIntentByPackageName(context, packageName); if (intent != null) { context.startActivity(intent); return true; } return false; } /** * 方法描述:打开指定包名的App应用信息界面 * * @param context 上下文 * @param packageName 包名 */ public static void openAppInfo(Context context, String packageName) { Intent intent = new Intent(); intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.parse("package:" + packageName)); context.startActivity(intent); } /** * 方法描述:可用来做App信息分享 * * @param context 上下文 * @param info 分享信息 */ public static void shareAppInfo(Context context, String info) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, info); context.startActivity(intent); } /** * 方法描述:判断当前App处于前台还是后台 * <p>需添加权限 android.permission.GET_TASKS</p> * <p>并且必须是系统应用该方法才有效</p> * * @param context 上下文 * @return true: 后台<br>false: 前台 */ public static boolean isAppBackground(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); @SuppressWarnings("deprecation") List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; } }

    转载请注明原文地址: https://ju.6miu.com/read-1311633.html
    最新回复(0)