package com.lzx.lock.service; import android.app.IntentService; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import com.lzx.lock.base.AppConstants; import com.lzx.lock.bean.CommLockInfo; import com.lzx.lock.bean.FaviterInfo; import com.lzx.lock.db.CommLockInfoManager; import com.lzx.lock.utils.SpUtil; import org.litepal.crud.DataSupport; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * 后台加载应用列表 * Created by xian on 2017/2/17. */ public class LoadAppListService extends IntentService { public static final String ACTION_START_LOAD_APP = "com.lzx.lock.service.action.LOADAPP"; private PackageManager mPackageManager; private CommLockInfoManager mLockInfoManager; long time = 0; public LoadAppListService() { super("LoadAppListService"); } @Override public void onCreate() { super.onCreate(); mPackageManager = getPackageManager(); mLockInfoManager = new CommLockInfoManager(this); } @Override protected void onHandleIntent(Intent handleIntent) { time = System.currentTimeMillis(); boolean isInitFaviter = SpUtil.getInstance().getBoolean(AppConstants.LOCK_IS_INIT_FAVITER, false); boolean isInitDb = SpUtil.getInstance().getBoolean(AppConstants.LOCK_IS_INIT_DB, false); if (!isInitFaviter) { SpUtil.getInstance().putBoolean(AppConstants.LOCK_IS_INIT_FAVITER, true); initFavoriteApps(); } //每次都获取手机上的所有应用 Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> resolveInfos = mPackageManager.queryIntentActivities(intent, 0); //非第一次,对比数据 if (isInitDb) { List<ResolveInfo> appList = new ArrayList<>(); List<CommLockInfo> dbList = mLockInfoManager.getAllCommLockInfos(); //获取数据库列表 //处理应用列表 for (ResolveInfo resolveInfo : resolveInfos) { if (!resolveInfo.activityInfo.packageName.equals(AppConstants.APP_PACKAGE_NAME) && !resolveInfo.activityInfo.packageName.equals("com.android.settings")) { appList.add(resolveInfo); } } if (appList.size() > dbList.size()) { //如果有安装新应用 List<ResolveInfo> reslist = new ArrayList<>(); HashMap<String, CommLockInfo> hashMap = new HashMap<>(); for (CommLockInfo info : dbList) { hashMap.put(info.getPackageName(), info); } for (ResolveInfo info : appList) { if (!hashMap.containsKey(info.activityInfo.packageName)) { reslist.add(info); } } try { if (reslist.size() != 0) mLockInfoManager.instanceCommLockInfoTable(reslist); //将剩下不同的插入数据库 } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } else if (appList.size() < dbList.size()) { //如果有卸载应用 List<CommLockInfo> commlist = new ArrayList<>(); HashMap<String, ResolveInfo> hashMap = new HashMap<>(); for (ResolveInfo info : appList) { hashMap.put(info.activityInfo.packageName, info); } for (CommLockInfo info : dbList) { if (!hashMap.containsKey(info.getPackageName())) { commlist.add(info); } } //Logger.d("有应用卸载,个数是 = " + dbList.size()); if (commlist.size() != 0) mLockInfoManager.deleteCommLockInfoTable(commlist);//将多的从数据库删除 } else { //Logger.d("应用没多没少,正常"); } } else { //数据库只插入一次 SpUtil.getInstance().putBoolean(AppConstants.LOCK_IS_INIT_DB, true); try { mLockInfoManager.instanceCommLockInfoTable(resolveInfos); //插入数据库 } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } // Log.i("onHandleIntent", "耗时 = " + (System.currentTimeMillis() - time)); } @Override public void onDestroy() { super.onDestroy(); mLockInfoManager = null; } /** * 初始化推荐加锁的应用 */ public void initFavoriteApps() { List<String> packageList = new ArrayList<>(); List<FaviterInfo> faviterInfos = new ArrayList<>(); packageList.add("com.android.gallery3d"); //相册 packageList.add("com.android.mms"); //短信 packageList.add("com.tencent.mm"); //微信 packageList.add("com.android.contacts"); //联系人和电话 packageList.add("com.facebook.katana"); //facebook packageList.add("com.facebook.orca"); //facebook Messenger packageList.add("com.mediatek.filemanager"); //文件管理器 packageList.add("com.sec.android.gallery3d"); //也是个相册 packageList.add("com.android.email"); //邮箱 packageList.add("com.sec.android.app.myfiles"); //三星的文件 packageList.add("com.android.vending"); //应用商店 packageList.add("com.google.android.youtube"); //youtube packageList.add("com.tencent.mobileqq"); //qq packageList.add("com.tencent.qq"); //qq packageList.add("com.android.dialer"); //拨号 packageList.add("com.twitter.android"); //twitter for (String packageName : packageList) { FaviterInfo info = new FaviterInfo(); info.setPackageName(packageName); faviterInfos.add(info); } DataSupport.deleteAll(FaviterInfo.class); DataSupport.saveAll(faviterInfos); } }