有时候项目中需要为不同客户或者在不同条件下是显示或者隐藏不同的app,则可以在以下路径的文件中添加如下代码
frameworks / base/services/core/java/com/android/server/am/ActivityManagerService.java
每次开机过程中,android系统都会走以上文件中的finishBooting()方法。故可以在此方法中做如下操作
/**在boot完成后执行此方法,故在此方法中实现隐藏或者显示(注意导包)**/
final void finishBooting() {
final PackageManager pm = mContext.getPackageManager();
if(checkApplication("com.test.app")){
if(isHideApp()){
if(PackageManager.COMPONENT_ENABLED_STATE_DISABLED != pm.getApplicationEnabledSetting("com.test.app")){
Log.d(TAG, " hide test app");
pm.setApplicationEnabledSetting("com.test.app",PackageManager.COMPONENT_ENABLED_STATE_DISABLED,0);
}
}else{
if(PackageManager.COMPONENT_ENABLED_STATE_DISABLED == pm.getApplicationEnabledSetting("com.test.app")){
Log.d(TAG, "hide test app");
pm.setApplicationEnabledSetting("com.test.app",PackageManager.COMPONENT_ENABLED_STATE_ENABLED,0);
}
}
}
}
/**需要隐藏app的条件判断方法**/
public boolean isHideApp() {
//条件
}
/**检查app存在的方法**/
public boolean checkApplication(String packageName) {
if (packageName == null || "".equals(packageName)){
return false;
}
try {
ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
Slog.i(TAG, "test checkApplication:true");
return true;
} catch (NameNotFoundException e) {
Slog.i(TAG, "test checkApplication:false");
return false;
}
}