Launcher 自定义APP排序

1、关键代码

1、Launcher.java
通过log打印,onCreate里面没有加载列表,在onResume里面:

if (mOnResumeState != State.APPS) {
        tryAndUpdatePredictedApps();---------这里更新APP
}

2、tryAndUpdatePredictedApps

AllAppsContainerView mAppsView;

List<ComponentKeyMapper<AppInfo>> apps = mLauncherCallbacks.getPredictedApps();
        if (apps != null) {
            mAppsView.setPredictedApps(apps);------mAppsView这个就是加载的APP列表了
        }

3、setPredictedApps

private final List<AppInfo> mApps = new ArrayList<>();

public void setPredictedApps(List<ComponentKeyMapper<AppInfo>> apps) {
        mApps.setPredictedApps(apps);------继续跟踪
    }

public void setPredictedApps(List<ComponentKeyMapper<AppInfo>> apps) {
        mPredictedAppComponents.clear();
        mPredictedAppComponents.addAll(apps);


        List<AppInfo> newPredictedApps = processPredictedAppComponents(apps);
        // 我们只需要在任何可见的可预测应用程序发生变化的情况下进行工作。
        if (!newPredictedApps.equals(mPredictedApps)) {
            if (newPredictedApps.size() == mPredictedApps.size()) {
                swapInNewPredictedApps(newPredictedApps);
            } else {
                // 我们需要更新所有项目的appIndex。
                onAppsUpdated();--------------重点
            }
        }
    }
    /**
     *更新应用程序集时更新内部。
     */
    private void onAppsUpdated() {
        // Sort the list of apps
        mApps.clear();
        mApps.addAll(mComponentToAppMap.values()); //app包名
        Collections.sort(mApps, mAppNameComparator); //按abcd拼音排序

mComponentToAppMap,它就是获取的系统的APP值,.values()就是APP的包名

2、如何自定义APP排序?

1、自己做一个list集合列表
2、把系统获取过来要加载的app都加到mylist
3、然后把mApps清空
4、再直接导入mApps.addAll(mylist)

举例:

private static String[] UESR_APPS_PKGS = {A;B;C;D};
    /**
     * Adds or updates existing apps in the list
     * 这里是遍历添加系统APP的地方,我们在这来获取AppInfo app存到我们自己的list里面去。
     */
    public void addOrUpdateApps(List<AppInfo> apps) {
        for (AppInfo app : apps) {
            mComponentToAppMap.put(app.toComponentKey(), app);
            String str = app.componentName.getPackageName();
            if(str.contains("com.android.contacts")){
                list_csh[0] = app;
                }else if(str.contains("org.codeaurora.snapcam")){
                list_csh[1] = app;
                    }else if(str.contains("com.android.settings")){
                    list_csh[2] = app;
                        }
        }
        onAppsUpdated();
    }
private static String[] list_csh = ("com.android.contacts","org.codeaurora.snapcam","com.android.settings");
private AppInfo[] list_csh = new AppInfo[3];
 public void addOrUpdateApps(List<AppInfo> apps) {
     for (AppInfo app : apps) {
        mComponentToAppMap.put(app.toComponentKey(), app);
        String str = app.componentName.getPackageName();
        if(str.contains("com.android.contacts")){
            list_csh[0] = app;
           }else if(str.contains("org.codeaurora.snapcam")){
            list_csh[1] = app;
                }else if(str.contains("com.android.settings")){
               list_csh[2] = app;
                    }
     }
     onAppsUpdated();
 }
 private void onAppsUpdated() {
     // Sort the list of apps
     mApps.clear();
     mApps.addAll(mComponentToAppMap.values());
     Collections.sort(mApps, mAppNameComparator);
     Arrays.asList(list_csh);
    int i = 0;
    while(i < list_csh.length)
        {
        if (list_csh[i] != null)
            mApps.add(list_csh[i]);
            i++;
        }

参考资料

这是很久之前参考的一篇文章,但忘记了连接找不到了,如有侵权,立即删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值