android4过滤设置中能显示的应用

需求

安卓4.4系统, 过CTA入网认证,桌面只有7个应用,在设置–应用–全部中显示的除了桌面的还有后台的几十个应用,
实验室要求只保留显示桌面上的应用,安卓8没有这个问题。

源码定位

  1. 首先定位设置的源码目录packages/apps/Settings/,
  2. 然后在些目录下搜索UI上的关键字,比如应用列表分类,定位到应用这个界面的源码
    packages/apps/Settings/src/com/android/settings/applications/ManageAppSettings.java
  3. 顺藤摸瓜找到具体实现ManageApplications.java的rebuild函数
  4. 最后是定位到ApplicationsState.java,修改它,根据包名做过滤,如果是系统应用则判断是否是自己要的桌面上的几个应用。

代码实现

diff --git a/packages/apps/Settings/src/com/android/settings/applications/ApplicationsState.java b/packages/apps/Settings/src/com/android/settings/applications/ApplicationsState.java
index 9ea552d..d086dd8 100644
--- a/packages/apps/Settings/src/com/android/settings/applications/ApplicationsState.java
+++ b/packages/apps/Settings/src/com/android/settings/applications/ApplicationsState.java
@@ -612,6 +612,10 @@ public class ApplicationsState {
             if (DEBUG) Log.i(TAG, "Rebuilding...");
             for (int i=0; i<apps.size(); i++) {
                 ApplicationInfo info = apps.get(i);
+                if (needHideForCta(mContext, info)) {
+                    Log.i(TAG, "ignore:" + info.packageName);
+                    continue;
+                }
                 if (filter == null || filter.filterApp(info)) {
+                if (needHideForCta(mContext, info)) {
+                    Log.i(TAG, "ignore:" + info.packageName);
+                    continue;
+                }
                 if (filter == null || filter.filterApp(info)) {
                     synchronized (mEntriesMap) {
                         if (DEBUG_LOCKING) Log.v(TAG, "rebuild acquired lock");
@@ -1116,4 +1120,43 @@ public class ApplicationsState {
         }
     };
     /* @} */
+
+
+    private boolean needHideForCta(Context context, ApplicationInfo info) {
+        // cta认证设置--应用, 系统应用只显示桌面的几个应用及SOS与SIM卡工具包
+        String[] desktopPackages = {
+                "com.android.dialer",
+                "com.android.settings",
+                "com.android.contacts",
+                "com.android.gallery3d",
+                "com.spreadst.security.permission",
+                "com.sprd.practicaltools",
+                "com.sprd.fileexplorer",
+                "com.android.sos",
+                "com.android.stk"
+        };
+        if (isSystemApplication(context, info.packageName)) {
+            for (int i = 0; i < desktopPackages.length; ++i) {
+                if (info.packageName.equals(desktopPackages[i])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    public static boolean isSystemApplication(Context context, String packageName){
+        PackageManager mPackageManager = context.getPackageManager();
+        try {
+            final PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, PackageManager.GET_CONFIGURATIONS);
+            if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)!=0){
+                return true;
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }

作者:帅得不敢出门 谢绝转载

猜你喜欢

转载自blog.csdn.net/zmlovelx/article/details/128706733