在android N 的Launcher3中隐藏某些app应用图标
2017-12-13 16:16
731 查看
在android N 的Launcher3中隐藏某些app应用图标
桌面应用整理有些app应用不想要显示在桌面上,去掉这些应用图标的话,修改Launcher3 代码里的LauncherModel.java在LauncherModel里有个方法loadAllapps加载了所有app,我就是在这里隐藏某些app
private void loadAllApps() { final long loadTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0; final Callbacks oldCallbacks = mCallbacks.get(); if (oldCallbacks == null) { // This launcher has exited and nobody bothered to tell us. Just bail. Log.w(TAG, "LoaderTask running with no launcher (loadAllApps)"); return; } final List<UserHandleCompat> profiles = mUserManager.getUserProfiles(); // Clear the list of apps mBgAllAppsList.clear(); for (UserHandleCompat user : profiles) { // Query for the set of apps final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0; final List<LauncherActivityInfoCompat> apps = mLauncherApps.getActivityList(null, user); if (DEBUG_LOADERS) { Log.d(TAG, "getActivityList took " + (SystemClock.uptimeMillis()-qiaTime) + "ms for user " + user); Log.d(TAG, "getActivityList got " + apps.size() + " apps for user " + user); } // Fail if we don't have any apps // TODO: Fix this. Only fail for the current user. if (apps == null || apps.isEmpty()) { return; } boolean quietMode = mUserManager.isQuietModeEnabled(user); // Create the ApplicationInfos for (int i = 0; i < apps.size(); i++) { LauncherActivityInfoCompat app = apps.get(i); if (DEBUG_LOADERS) Log.e(TAG,"loadAllPackages = "+app.getComponentName().getPackageName()); //Modify by yy,does not add unuse apps //在这里根据app包名判断该应用是否在不需要显示的列表里,如果是就不add到mBgAllAppsList if(!excludePackage(mContext,app.getComponentName().getPackageName())){ // This builds the icon bitmaps. mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, quietMode)); } //end Modify by yy } .... private boolean excludePackage(Context context,String packageName){ //get no add apps if(excludePackageArray == null) excludePackageArray = context.getResources().getStringArray(R.array.excludePackageList); return Arrays.asList(excludePackageArray).contains(packageName); }
有兴趣的话可以看看mBgAllAppsList 也就是AllAppsList
在AllAppsList里管理了所有的app和app的更新。
做到这里的时候发现有个问题,比如某个app在loadAllApps 已经去除了,但是有时候还会突然冒出来,查看了AllAppsList 发现它有个updatePackage 方法,在这里面也会将app add到AllAppsList的app list里面。
根据它找到在LauncherModel有个PackageUpdatedTask的类操作,在这里会更新桌面的应用。所以我就在这里的update里也进行excludePackage方法的判断
case OP_UPDATE: for (int i=0; i<N; i++) { if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.updatePackage " + packages[i]); //Modify by yy,does not add unuse apps if(!excludePackage(context,packages[i])){ mIconCache.updateIconsForPkg(packages[i], mUser); mBgAllAppsList.updatePackage(context, packages[i], mUser); mApp.getWidgetCache().removePackage(packages[i], mUser); }//end Modify by yy } // Since package was just updated, the target must be available now. flagOp = FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE); break;
相关文章推荐
- Android应用如何隐藏APP桌面图标
- Android隐藏app应用图标
- Android应用隐藏在所有程序列表内显示图标
- 在Android隐藏launcher应用图标由其他应用启动
- Android 隐藏App的图标
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- 解决android某些应用开发某些类无法解析/找到的问题--使用android隐藏类的方法
- 在Android隐藏launcher应用图标由其他应用启动
- Android App首次安装完成后在安装界面直接打开应用,再按home键返回桌面,从桌面图标重新进入app,返回不到之前的界面问题
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示 Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android隐藏app桌面图标
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- Android隐藏应用图标,简单到哭
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- Android App更改应用的图标的实现方法
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- 转Android APP安装后不在桌面显示图标的应用场景举例和实现方法
- Android 不同手机上安装app时,程序应用图标不一致的问题解决办法