如何在android系统代码中实现去动态隐藏或者显示一个app

有时候项目中需要为不同客户或者在不同条件下是显示或者隐藏不同的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;
        }

    }

猜你喜欢

转载自blog.csdn.net/xct841990555/article/details/81067214