获取、管理手机中已安装的所有应用信息
1、创建应用的实体类AppInfo,属性有应用的名称、包名、图标、第一次安装时间和版本名称
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class AppInfo { private String name ;//应用名称 private String packageName ;//应用包名 private Drawable icon ;//应用图标 private long firstInstallTime ;//应用第一次安装的时间 private String versionName ;//应用的版本名称 public String getName() { return name; } public String getPackageName() { return packageName; } public Drawable getIcon() { return icon; } public long getFirstInstallTime() { return firstInstallTime; } public String getVersionName() { return versionName; } public AppInfo(String name, String packageName, Drawable icon, long firstInstallTime, String versionName) { this.name = name; this.packageName = packageName; this.icon = icon; this.firstInstallTime = firstInstallTime; this.versionName = versionName; } }
2、获取所有应用信息的方法
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public static List<AppInfo> getAppInfos(Context context){ List<AppInfo> appInfoList = new ArrayList<>() ; //获取包管理器 PackageManager pm = context.getPackageManager(); //获取已安装的包信息 List<PackageInfo> packageInfos = pm.getInstalledPackages(0); for(PackageInfo packageInfo : packageInfos){ //获取包名 String packageName = packageInfo.packageName; //获取应用图标 Drawable icon = packageInfo.applicationInfo.loadIcon(pm); //获取应用的名称 String name = packageInfo.applicationInfo.loadLabel(pm).toString(); //获取第一次安装的时间 long firstInstallTime = packageInfo.firstInstallTime; //获取版本号 int versionCode = packageInfo.versionCode; //获取版本名称 String versionName = packageInfo.versionName; AppInfo appInfo = new AppInfo(name,packageName,icon,firstInstallTime,versionName); appInfoList.add(appInfo); } return appInfoList ; }
3、打开应用方法
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public static void openApplication(Context context,String packageName) { Intent intent=isexit(context,packageName); if(intent==null){ System.out.println("APP not found!....:"+packageName); } context.startActivity(intent); } /** * 通过packagename判断应用是否安装 * @param context * * @return 跳转的应用主activity Intent * */ public static Intent isexit(Context context,String pk_name){ //获取包管理器 PackageManager packageManager = context.getPackageManager(); //通过包名获取Intent Intent it= packageManager.getLaunchIntentForPackage(pk_name); return it; }
4、进入应用详情页面
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public static void showInstalledAppDetails(Context context, String packageName) { Intent intent = new Intent(); final int apiLevel = Build.VERSION.SDK_INT; if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口 intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", packageName, null); intent.setData(uri); } else { // 2.3以下,使用非公开的接口(查看InstalledAppDetails源码) // 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。 final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra(appPkgName, packageName); } context.startActivity(intent); }
5、卸载应用
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public static void uninstallApplication(Context context,String packageName){ Intent intent = new Intent() ; intent.setAction("android.intent.action.DELETE"); intent.addCategory("android.intent.category.DEFAULT"); intent.setData(Uri.parse("package:"+packageName)); context.startActivity(intent); }