需求
安卓4.4系统, 过CTA入网认证,桌面只有7个应用,在设置–应用–全部中显示的除了桌面的还有后台的几十个应用,
实验室要求只保留显示桌面上的应用,安卓8没有这个问题。
源码定位
- 首先定位设置的源码目录packages/apps/Settings/,
- 然后在些目录下搜索UI上的关键字,比如应用列表分类,定位到应用这个界面的源码
packages/apps/Settings/src/com/android/settings/applications/ManageAppSettings.java - 顺藤摸瓜找到具体实现ManageApplications.java的rebuild函数
- 最后是定位到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;
+ }
作者:帅得不敢出门 谢绝转载