/* * Copyright (C) 2012 www.amsoft.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.yzy.supercleanmaster.utils; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import com.yzy.supercleanmaster.model.AutoStartInfo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; // TODO: Auto-generated Javadoc 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 static List<AutoStartInfo> fetchInstalledApps(Context mContext) { PackageManager pm = mContext.getPackageManager(); List<ApplicationInfo> appInfo = pm.getInstalledApplications(0); Iterator<ApplicationInfo> appInfoIterator = appInfo.iterator(); List<AutoStartInfo> appList = new ArrayList<AutoStartInfo>(appInfo.size()); while (appInfoIterator.hasNext()) { ApplicationInfo app = appInfoIterator.next(); int flag = pm.checkPermission( BOOT_START_PERMISSION, app.packageName); if (flag == PackageManager.PERMISSION_GRANTED) { AutoStartInfo appMap = new AutoStartInfo(); String label = pm.getApplicationLabel(app).toString(); Drawable icon = pm.getApplicationIcon(app); String packageName = app.packageName; if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { appMap.setSystem(true); //abAppProcessInfo.isSystem = true; } else { appMap.setSystem(false); // abAppProcessInfo.isSystem = false; } // appMap.setDesc(desc); appMap.setIcon(icon); appMap.setPackageName(packageName); appMap.setLabel(label); appList.add(appMap); } } return appList; } public static List<AutoStartInfo> fetchAutoApps(Context mContext) { PackageManager pm = mContext.getPackageManager(); Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED); List<ResolveInfo> resolveInfoList = pm.queryBroadcastReceivers(intent, PackageManager.GET_DISABLED_COMPONENTS); List<AutoStartInfo> appList = new ArrayList<AutoStartInfo>(); String appName = null; String packageReceiver = null; Drawable icon = null; boolean isSystem = false; boolean isenable = true; if (resolveInfoList.size() > 0) { appName = resolveInfoList.get(0).loadLabel(pm).toString(); packageReceiver = resolveInfoList.get(0).activityInfo.packageName + "/" + resolveInfoList.get(0).activityInfo.name; icon = resolveInfoList.get(0).loadIcon(pm); ComponentName mComponentName1 = new ComponentName(resolveInfoList.get(0).activityInfo.packageName, resolveInfoList.get(0).activityInfo.name); if (pm.getComponentEnabledSetting(mComponentName1) == 2) { isenable = false; } else { isenable = true; } if ((resolveInfoList.get(0).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { isSystem = true; } else { isSystem = false; } for (int i = 1; i < resolveInfoList.size(); i++) { AutoStartInfo mAutoStartInfo = new AutoStartInfo(); if (appName.equals(resolveInfoList.get(i).loadLabel(pm).toString())) { packageReceiver = packageReceiver + ";" + resolveInfoList.get(i).activityInfo.packageName + "/" + resolveInfoList.get(i).activityInfo.name; } else { mAutoStartInfo.setLabel(appName); mAutoStartInfo.setSystem(isSystem); mAutoStartInfo.setEnable(isenable); mAutoStartInfo.setIcon(icon); mAutoStartInfo.setPackageReceiver(packageReceiver); appList.add(mAutoStartInfo); appName = resolveInfoList.get(i).loadLabel(pm).toString(); packageReceiver = resolveInfoList.get(i).activityInfo.packageName + "/" + resolveInfoList.get(i).activityInfo.name; icon = resolveInfoList.get(i).loadIcon(pm); ComponentName mComponentName2 = new ComponentName(resolveInfoList.get(i).activityInfo.packageName, resolveInfoList.get(i).activityInfo.name); if (pm.getComponentEnabledSetting(mComponentName2) == 2) { isenable = false; } else { isenable = true; } if ((resolveInfoList.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { isSystem = true; } else { isSystem = false; } } } AutoStartInfo mAutoStartInfo = new AutoStartInfo(); mAutoStartInfo.setLabel(appName); mAutoStartInfo.setSystem(isSystem); mAutoStartInfo.setEnable(isenable); mAutoStartInfo.setIcon(icon); mAutoStartInfo.setPackageReceiver(packageReceiver); appList.add(mAutoStartInfo); } // for (ResolveInfo resolveInfo : resolveInfoList) { // // // ComponentName mComponentName = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); // // // if (pm.getComponentEnabledSetting(mComponentName) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { // // // as.setEnable(false); // } else { // as.setEnable(true); // } // // if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { // as.setSystem(true); // } else { // as.setSystem(false); // } // as.setIcon(resolveInfo.loadIcon(pm)); // as.setPackageName(resolveInfo.activityInfo.packageName); // as.setLabel(resolveInfo.loadLabel(pm).toString()); // appList.add(as); // Log.i("yzy", "COMPONENT_ENABLED_STATE:" + pm.getComponentEnabledSetting(mComponentName) + "\tpackageName:" + resolveInfo.activityInfo.packageName); //} return appList; } }