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

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