Android获取手机已安装的应用程序并启动
2016-09-17 22:04
453 查看
最近在做项目的时候,需要获取手机上的应用程序并启动,一个类似桌面软件的应用。
1.布局我们使用一个GridView来呈现应用程序这里就不贴代码了,首先来获取已安装的app
//扫描手机上的应用是一个耗时操作,所以把它放在一个线程中执行 new Thread(new Runnable() { @Override public void run() { List<PackageInfo> packageInfo = getPackageManager() .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); GetAppInfo getAppInfo = new GetAppInfo(MainActivity.this, packageInfo); apps = getAppInfo.getApps(); handler.sendEmptyMessage(0); } }).start();
//显示列表 AppAdapter adapter = new AppAdapter(apps, MainActivity.this); gridView.setAdapter(adapter);
2.来具体看下GetAppInfo类中的处理
/**ApplicationInfo 中为我们封装了一系列app的属性和相关的东西, 这里只获取了我需要的几个内容没有兴趣的可以看下ApplicationInfo 都封装了什么*/ private List<PackageInfo> packageInfo; private PackageManager packageManager; private List<AppItem> list; public GetAppInfo(Context context, List<PackageInfo> packageInfo) { this.packageInfo = packageInfo; packageManager = context.getPackageManager(); list = new ArrayList<>(); } public List<AppItem> getApps() { for (PackageInfo info : packageInfo) { ApplicationInfo appInfo = info.applicationInfo; //去除系统应用 if (!filterApp(appInfo)) { continue; } //拿到应用程序的图标 Drawable icon = appInfo.loadIcon(packageManager); //拿到应用程序的程序名 String appName = appInfo.loadLabel(packageManager).toString(); //拿到应用程序的包名 String packageName = appInfo.packageName; //拿到应用程序apk路径 String apkePath = appInfo.sourceDir; //获取应用程序启动意图 Intent intent = packageManager.getLaunchIntentForPackage(packageName); AppItem appItem = new AppItem(icon, appName, packageName, intent); list.add(appItem); } return list; }
过滤一些系统app
/** * 判断某一个应用程序是不是系统的应用程序, * 如果是返回true,否则返回false。 */ public boolean filterApp(ApplicationInfo info) { //有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的,它还是系统应用,这个就是判断这种情况的 if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { return true; //判断是不是系统应用 } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { return true; } return false; }
3.AppItem是一个实体类,对获取到的东西进行封装这里就不贴出代码了。既然获取到应用了,那我们来尝试打开
//就一行代码可以实现,主要还是上面封装的代码 startActivity(apps.get(position).getIntent());
国际惯例最后上效果图
相关文章推荐
- Android之获取手机上已安装的所有的应用程序的信息,并判断是否安装了某应用程序(系统程序或非系统应用程序判断)
- Android - 安装及卸载应用,启动应用程序,分享,详细信息,设备进程信息获取,获取进程占用RAM,清理进程
- Android之——获取手机安装的应用程序
- Android之——获取手机安装的应用程序
- Android 获取你手机中安装的应用的包名及启动页
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等
- 关于android开发出现“你的手机上未安装应用程序”问题
- Android如何获取手机上面已经安装的app
- Android上获取本机安装的应用程序
- Android 应用程序获取手机的 IMSI 码
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- android 手机安装应用程序(APK)权限详细对照表
- android获取手机安装软件
- 通过包名打开另外一个应用程序和获取手机中已安装apk文件信息(PackageInfo、ResolveIn ...
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- 关于Android系统中“你的手机上未安装应用程序”问题
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)