环境是高通8909平台,默认使用Launcher3作为主应用。
众所周知,当删除一个apk后,图标会消失,但是位置还是留着的,这种现象非常正常,我觉得没有什么反人类的。
但是,骁龙相机有一个功能,收到开机广播会检测是否有相机模组,没有就会自动删除图标。
这样就会导致一个问题,每次恢复出厂设置,没有操作,桌面就会有一块空缺,甚至用户会看到图标消失的过程。

我目前的修改方案并不能让用户体验拔群,也是会有消失的过程,并且还会闪一下,图标全部消失,重新排列。

这个鸡肋功能我也头痛了2天,根本没有相关的解答,偶然解看到一篇描述Launcher3方法的详解:
Android Launcher分析和修改4——初始化加载数据

里面有一个方法描述:
startBinding():通知Launcher开始加载数据。清空容器数据,重新加载

我Peter Tingle了一下,想了这个方案:

Index: packages/odm/apps/Launcher3N/src/com/android/launcher3/LauncherModel.java
===================================================================
--- packages/odm/apps/Launcher3N/src/com/android/launcher3/LauncherModel.java	(版本 735)
+++ packages/odm/apps/Launcher3N/src/com/android/launcher3/LauncherModel.java	(工作副本)
@@ -125,10 +125,6 @@
     // need to do a requery.  These are only ever touched from the loader thread.
     private boolean mWorkspaceLoaded;
     private boolean mAllAppsLoaded;
+    private static final String SNAPCAM = "org.codeaurora.snapcam";
     private boolean mSyncIsPending = false;
     private int mSyncBindPage;
@@ -1478,17 +1474,6 @@
         return false;
     }
 
+    boolean isPackageNeedForceReload(String pkgName) {
+        switch (pkgName) {
+            case SNAPCAM:
+                return true;
+        }
+        return false;
+    }

 
@@ -3124,17 +3109,6 @@
                         Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
                         if (callbacks == cb && cb != null) {
                             callbacks.bindComponentsRemoved(removedPackageNames, removedApps);
+                            for (AppInfo a : removedApps) {
+                                if (isPackageNeedForceReload(a.componentName.getPackageName())) {
+                                    Log.d(TAG, "removedApps = " + a.componentName.getPackageName() + " and force to reload!");
+                                    callbacks.startBinding();
+                                    resetLoadedState(true, true);
+                                    startLoader(true, PagedView.INVALID_RESTORE_PAGE,
+                                        LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE);
+                                }
+                            }
                         }
                     }
                 });
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐