您的位置:首页 > 移动开发 > Android开发

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());


国际惯例最后上效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐