Android 8.1.0 之在 Settings 中隐藏指定的应用信息

        之所以会有这个需求,是因为之前做过在 Launcher3 中隐藏应用图标。之前虽然在 Launcher 中隐藏了应用图标,但是依次点击 "设置  -  应用和通知  -  查看所有的应用" ,还是可以看到这些被隐藏掉应用图标的应用信息,所以我们还得在这里做一下过滤:在显示所有应用的时候,按照应用的包名,把需要隐藏的应用给过滤掉。主要是修改下面:

apps/Settings/res/values/arrays.xml

apps/Settings/src/com/android/settings/applications/ManageApplications.java

        首先,在 apps/Settings/res/values/arrays.xml 中添加上需要隐藏的应用的包名:

    
	
    
        com.android.apkinstaller  
        org.chromium.webview_shell
        com.android.calendar      
        com.android.quicksearchbox
        android.rk.RockVideoPlayer
        com.android.contacts      
        com.android.rk            
        com.android.music         
        com.android.documentsui   
        com.tencent.mobileqq      
        teaonly.rk.droidipcam     
    

这样当我们加载使用这些资源时,只需要

String[] stringPackageNameArray = context.getResources().getStringArray(R.array.package_name);

然后修改 apps/Settings/src/com/android/settings/applications/ManageApplications.java 。经过查看,发现这个类中声明了两个List 去保存所有的应用信息:

        private ArrayList mBaseEntries;
        private ArrayList mEntries;

所以对应的,我们需要调用过滤方法,对这两个 List 都过滤一遍包名。过滤方法如下:

   /**
	
     * Filter out apps by package name that don't need to be displayed in Application list.
	
     * @param context Context.
	
     * @param tempList ArrayList.
	
     * @return targetList.
	
     */
	
    private ArrayList excludeApplications(Context context ,ArrayList tempList){
        ArrayList targetList = tempList;
        Log.d("exclude","targetList size is ->" + targetList.size());
        //Get package name array
        String[] stringPackageNameArray = context.getResources().
                getStringArray(R.array.package_name);
        if (stringPackageNameArray.length != 0){
            //Traversing package name array
            for (String packageName : stringPackageNameArray){
                //Comparison
                if (tempList != null && tempList.size() != 0){
                    for (int i = 0 ; i < tempList.size() ; i++ ){
                        String name = tempList.get(i).info.packageName;
                        if (!TextUtils.isEmpty(name) && packageName.equals(name)){
                            tempList.remove(i);
                        }
                    }
                    targetList = tempList;
                    Log.d("exclude","targetList size is ->>" + targetList.size());
                }
            }
            Log.d("exclude","targetList size is ->>>" + targetList.size());
        }
        return targetList;
    }

好了,就是这些。 

 

你可能感兴趣的:(Android 8.1.0 之在 Settings 中隐藏指定的应用信息)