android 11 禁止某些apk 安装的 简便方法

修改意图:

强制 限制 某些apk 在机器上使用

思路:

在framework层 PackageManagerService.java

中的 private PrepareResult preparePackageLI(InstallArgs args, PackageInstalledInfo res) 方法来修改:

下面是直接写死某些apk ,不让其安装 ,也支持动态 添加 和删除 包名的 操作

        if (parsedPackage != null) {
            String installAppStr = "ru.andr7e.deviceinfohw;com.abs.cpu_z_advance;com.specdevice;mark.fakedevicetest;com.inpocketsoftware.andTest";          
            List<String> appList = new ArrayList<String>();
            if(!TextUtils.isEmpty(installAppStr)){
                appList = Arrays.asList(installAppStr.split(";"));
                if(appList.size()>0){
                    String currentPkgName = parsedPackage.getPackageName();
                    // if((installMode == 1 && appList.contains(currentPkgName)) || (installMode == 2 && !appList.contains(currentPkgName)){
                    if(appList.contains(currentPkgName)){
                        res.setError(INSTALL_FAILED_INTERNAL_ERROR, "Restrict installation applications:" + currentPkgName);
                    }
                }
            }
        } else {
            Log.d("fyTest", "Secure check install_app_white_Black_list is NULL");
        }

还有些客户 要求 能通过 自己的后台 来控制 安装与否

        if(JTY_YWG_APP_INSTALL_SWITCH){
            if (parsedPackage != null) {
                int installMode = android.provider.Settings.System.getInt(mContext.getContentResolver(), "install_app_mode",0);
                if(installMode == 0) {
                    res.setError(INSTALL_FAILED_INTERNAL_ERROR, "Restrict installation applications:");
                    mUiHandler.post(() -> {
                        AlertDialog d = new BaseErrorDialog(mUiContext);
                        d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
                        d.setCancelable(false);
                        d.setTitle(mUiContext.getText(R.string.error_message_title));
                        d.setMessage(mUiContext.getText(R.string.stop_install_apk));
                        d.setButton(DialogInterface.BUTTON_POSITIVE,
                            mUiContext.getText(R.string.ok),
                            mUiHandler.obtainMessage(DISMISS_DIALOG_UI_MSG, d));
                        d.show();
                        Message msg = mUiHandler.obtainMessage(DISMISS_DIALOG_UI_MSG, d);
                        msg.setAsynchronous(true);
                        mUiHandler.sendMessageDelayed(msg, 3000);
                    });
                }
            }
        }

思路是一样的 。上面的列子 还添加了一个提示框。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值