安卓不得不收藏的工具类之获取APP相关的信息
来源:互联网 发布:淘宝女装宝贝分类 编辑:程序博客网 时间:2024/04/29 12:16
package com.blankj.utilcode.utils;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;/** * <pre> * desc : App相关工具类 * </pre> */public class AppUtils { private AppUtils() { throw new UnsupportedOperationException("u can't fuck me..."); } /** * 安装App * <p>根据路径安装App</p> * * @param context 上下文 * @param filePath 文件路径 */ public static void installApp(Context context, String filePath) { installApp(context, new File(filePath)); } /** * 安装App * <p>根据文件安装App</p> * * @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 packagePath; 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 String getPackagePath() { return packagePath; } public void setPackagePath(String packagePath) { this.packagePath = packagePath; } 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 packagePath 包路径 * @param versionName 版本号 * @param versionCode 版本Code * @param isSD 是否安装在SD卡 * @param isUser 是否是用户程序 */ public AppInfo(String name, Drawable icon, String packageName, String packagePath, String versionName, int versionCode, boolean isSD, boolean isUser) { this.setName(name); this.setIcon(icon); this.setPackageName(packageName); this.setPackagePath(packagePath); this.setVersionName(versionName); this.setVersionCode(versionCode); this.setSD(isSD); this.setUser(isUser); }// @Override// public String toString() {// return getName() + "\n"// + getIcon() + "\n"// + getPackageName() + "\n"// + getPackagePath() + "\n"// + getVersionName() + "\n"// + getVersionCode() + "\n"// + isSD() + "\n"// + isUser() + "\n";// } } /** * 获取当前App信息 * <p>AppInfo(名称,图标,包名,版本号,版本Code,是否安装在SD卡,是否是用户程序)</p> * * @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 packagePath = ai.sourceDir; 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, packagePath, versionName, versionCode, isSD, isUser); } /** * 获取所有已安装App信息 * <p>{@link #getBean(PackageManager, PackageInfo)}(名称,图标,包名,包路径,版本号,版本Code,是否安装在SD卡,是否是用户程序)</p> * <p>依赖上面的getBean方法</p> * * @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 {@code true}: 已安装<br>{@code false}: 未安装 */ public static boolean isInstallApp(Context context, String packageName) { return getIntentByPackageName(context, packageName) != null; } /** * 打开指定包名的App * * @param context 上下文 * @param packageName 包名 * @return {@code true}: 打开成功<br>{@code 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>需添加权限 {@code <uses-permission android:name="android.permission.GET_TASKS"/>}</p> * <p>并且必须是系统应用该方法才有效</p> * * @param context 上下文 * @return {@code true}: 后台<br>{@code 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; }}
0 0
- 安卓不得不收藏的工具类之获取APP相关的信息
- 安卓工具类之app获取版本渠道信息工具类
- 作为一个屌丝程序员不得不收藏的工具类 一 IP获取工具类
- 获取APP的相关信息
- 安卓开发不得不收集的工具类
- 作为一个屌丝程序员不得不收藏的工具类 一 XML工具类之dom4j
- 安卓手机获取当前连接的WIFI相关信息
- 安卓手机获取当前连接的WIFI相关信息
- 获取ios应用的app相关信息
- Android开发之获取APP的应用程序名称以及版本名称信息java工具类
- 安卓中获取手机的相关信息的工具类
- 获取手机中所有apk相关信息的工具类
- 安卓获取APP的信息以及整个硬件、系统信息
- App相关的工具类
- 不得不收藏的APP设计资源站【UI设计师干货】
- 安卓那些你不得不收藏的开源第三方库
- 作为一个屌丝程序员不得不收藏的工具类 一 网站爬虫工具类
- 作为一个屌丝程序员不得不收藏的工具类 一 json工具类
- 按照 老罗博客学习安卓 记录
- CCF 201403-3 命令行选项
- 插播-IT书目
- hdu 1575Tr A(最基本的矩阵快速幂)
- 笔记-一牛人技术博客记录!
- 安卓不得不收藏的工具类之获取APP相关的信息
- Leetcode 8 String to Integer
- angularjs2 指令
- linux C++ 多线程编程
- 享元模式——滴滴打车的共享经济思维
- CCF 201604-4 游戏
- 大家聊springmvc+mybatis
- Red5文件结构简介
- C/C++ 指针常量和常量指针