之所以会有这个需求,是因为之前做过在 Launcher3 中隐藏应用图标。之前虽然在 Launcher 中隐藏了应用图标,但是依次点击 "设置 - 应用和通知 - 查看所有的应用" ,还是可以看到这些被隐藏掉应用图标的应用信息,所以我们还得在这里做一下过滤:在显示所有应用的时候,按照应用的包名,把需要隐藏的应用给过滤掉。主要是修改下面:
apps/Settings/res/values/arrays.xml
apps/Settings/src/com/android/settings/applications/ManageApplications.java
首先,在 apps/Settings/res/values/arrays.xml 中添加上需要隐藏的应用的包名:
<!-- List of applications package names that need to be hidden in the Settings application. -->
<string-array name="package_name">
<item>com.android.apkinstaller</item> <!-- Apkinstaller application -->
<item>org.chromium.webview_shell</item><!-- Webview application -->
<item>com.android.calendar</item> <!-- Calendar application -->
<item>com.android.quicksearchbox</item><!-- Search application -->
<item>android.rk.RockVideoPlayer</item><!-- VideoPlayer application -->
<item>com.android.contacts</item> <!-- Contacts application -->
<item>com.android.rk</item> <!-- Explorer application -->
<item>com.android.music</item> <!-- Music application -->
<item>com.android.documentsui</item> <!-- Files application -->
<item>com.tencent.mobileqq</item> <!-- QQ application -->
<item>teaonly.rk.droidipcam</item> <!-- HDMI IN application -->
</string-array>
这样当我们加载使用这些资源时,只需要
String[] stringPackageNameArray = context.getResources().getStringArray(R.array.package_name);
然后修改 apps/Settings/src/com/android/settings/applications/ManageApplications.java 。经过查看,发现这个类中声明了两个List 去保存所有的应用信息:
private ArrayList<ApplicationsState.AppEntry> mBaseEntries;
private ArrayList<ApplicationsState.AppEntry> mEntries;
所以对应的,我们需要调用过滤方法,对这两个 List 都过滤一遍包名。过滤方法如下:
/**
* Filter out apps by package name that don't need to be displayed in Application list.
* @param context Context.
* @param tempList ArrayList<ApplicationsState.AppEntry>.
* @return targetList.
*/
private ArrayList excludeApplications(Context context ,ArrayList<ApplicationsState.AppEntry> 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;
}
好了,就是这些。