1. 简介:
本文介绍了一种获取Android系统开机启动项列表的方法。是使用android.permission.RECEIVE_BOOT_COMPLETED, 和Android SDK提供的PackageManager类的相关方法来实现的。
2. 主要技术点:
(1)android.permission.RECEIVE_BOOT_COMPLETED:开机启动完成权限
(2)PackageManager:包管理器,提供了获取app等一系列方法;
(3)ApplicationInfo:应用程序相关信息;
3. 代码实现:
public class BootStartUtils {
private static final String BOOT_START_PERMISSION =
"android.permission.RECEIVE_BOOT_COMPLETED";
private Context mContext;
public BootStartUtils(Context context) {
mContext = context;
}
/**
* 获取Android开机启动列表
*/
public List<Map<String, Object>> fetchInstalledApps() {
PackageManager pm = mContext.getPackageManager();
List<ApplicationInfo> appInfo = pm.getInstalledApplications(0);
Iterator<ApplicationInfo> appInfoIterator = appInfo.iterator();
List<Map<String, Object>> appList = new ArrayList<Map<String, Object>>(appInfo.size());
while (appInfoIterator.hasNext()) {
ApplicationInfo app = appInfoIterator.next();
int flag = pm.checkPermission(
BOOT_START_PERMISSION, app.packageName);
if (flag == PackageManager.PERMISSION_GRANTED) {
Map<String, Object> appMap = new HashMap<String, Object>();
String label = pm.getApplicationLabel(app).toString();
Drawable icon = pm.getApplicationIcon(app);
String desc = app.packageName;
appMap.put("label", label);
appMap.put("icon", icon);
appMap.put("desc", desc);
appList.add(appMap);
}
}
return appList;
}
说明:
(1)pm.getInstalledApplications(0): 查询所有已经安装的应用程序列表;
(2)pm.getApplicationLabel:获取应用程序名称;
(3)pm.getApplicationIcon:获取应用程序的图标;
(4)app.packageName:应用程序包名
4. 在应用程序中的调用:
可以直接调用:
public List<Map<String, Object>> appList = BootStartUtils.fetchInstalledApps();
for (Map<String, Object> appMap: appList ) {
String label = (String)appMap.get("lable")
String pkgName = (String)appMap.get("desc")
Drawable icon = (Drawable)appMap.get("icon")
}
程序运行结果: