ToB企服应用市场:ToB评测及商务社交产业平台

标题: Android11 MTK 安装apk时举行暗码验证 [打印本页]

作者: 火影    时间: 2024-9-5 13:39
标题: Android11 MTK 安装apk时举行暗码验证
1、客户需求

  1.                 客户要求,在安装apk文件时,进行密码验证。apk文件来源包括浏览器下载、内存中、外接SDK中、adb命令安装等。之后在测试过程,又添加了一个限制,输入错误密码超过3次,则放弃本次安装。
复制代码
2、办理

  1.         路径:frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java       
复制代码
  1. private void showConfirmPwd(final InstallArgs args, final int currentStatus){
  2.         mHandler.post(new Runnable(){
  3.             @Override
  4.             public void run(){
  5.                 AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
  6.                 builder.setCancelable(false);
  7.                                 builder.setTitle(R.string.pwd_dialog_title);
  8.                                 final EditText et = new EditText(mContext);
  9.                                 builder.setView(et);
  10.                                 builder.setPositiveButton(R.string.pwd_sure, new DialogInterface.OnClickListener() {
  11.                                         @Override
  12.                                         public void onClick(DialogInterface dialogInterface, int i) {
  13.                                                 String etPwd = et.getText().toString();
  14.                                                 if(etPwd == null || etPwd.equals("")){
  15.                                                         inputCount++;
  16.                                                         if(inputCount >= 3){
  17.                                                                 processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );
  18.                                                         }else{
  19.                                                                 Toast.makeText(mContext,R.string.pwd_dialog_title,Toast.LENGTH_SHORT).show();
  20.                                                                 showConfirmPwd(mLzyArgs,mLzyCurrentStatus);
  21.                                                         }
  22.                                                        
  23.                                                 }else{
  24.                                                         if(!etPwd.equals(android.provider.Settings.System.getString(mContext.getContentResolver(),android.provider.Settings.System.SYS_PASSWORD))){
  25.                                                                 inputCount++;
  26.                                                                 if(inputCount >= 3){
  27.                                                                         processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );
  28.                                                                 }else{
  29.                                                                         Toast.makeText(mContext, R.string.pwd_correct,Toast.LENGTH_LONG).show();
  30.                                                                         showConfirmPwd(mLzyArgs,mLzyCurrentStatus);
  31.                                                                 }
  32.                                                         }else{
  33.                                                                 dialog.dismiss();
  34.                                                                 processPendingInstall2(args,currentStatus);
  35.                                                         }
  36.                                                 }
  37.                                         }
  38.                                 });
  39.                                 builder.setNegativeButton(R.string.pwd_cancel, new DialogInterface.OnClickListener() {
  40.                                         @Override
  41.                                         public void onClick(DialogInterface dialogInterface, int i) {
  42.                                                 dialog.dismiss();
  43.                                                 processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );
  44.                                         }
  45.                                 });
  46.                         dialog = builder.create();
  47.                         dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  48.                         dialog.show();
  49.                 }
  50.         });
  51.     }
  52.        
  53.     private String getInstallPkgName(InstallArgs args){
  54.                 PackageParser parser = new PackageParser();
  55.                 if((args.getCodePath() == null) || (args.getCodePath().equals(""))){
  56.                         return null;
  57.                 }
  58.                 try {
  59.             PackageParser.Package pkg = parser.parsePackage(new File(args.getCodePath()), 0, true);
  60.             return pkg.packageName; // 返回包名
  61.         } catch (PackageParser.PackageParserException e) {
  62.             // 处理异常,例如打印错误日志
  63.             Log.d("InstallArgs", "Unable to parse package at " + args.getCodePath(), e);
  64.             return null;
  65.         }
  66.     }
  67.     private InstallArgs mLzyArgs;
  68.     private int mLzyCurrentStatus;
  69.         private int inputCount = 0;
  70.        
  71.         private void processPendingInstall(final InstallArgs args, final int currentStatus) {
  72.                
  73.                 mLzyArgs = args;
  74.         mLzyCurrentStatus = currentStatus;
  75.         String mInstallPackageName = getInstallPkgName(args);
  76.                 if(mInstallPackageName == null){
  77.                         processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED);
  78.                 }else if (mInstallPackageName.equals("com.android.vending") || mInstallPackageName.equals("com.google.android.gms")){
  79.             processPendingInstall2(args,currentStatus);
  80.         }else{
  81.                         inputCount = 0;
  82.             showConfirmPwd(args,currentStatus);
  83.         }
  84.     }
  85.     private void processPendingInstall2(final InstallArgs args, final int currentStatus) {
  86.         if (args.mMultiPackageInstallParams != null) {
  87.             args.mMultiPackageInstallParams.tryProcessInstallRequest(args, currentStatus);
  88.         } else {
  89.             PackageInstalledInfo res = createPackageInstalledInfo(currentStatus);
  90.             processInstallRequestsAsync(
  91.                     res.returnCode == PackageManager.INSTALL_SUCCEEDED,
  92.                     Collections.singletonList(new InstallRequest(args, res)));
  93.         }
  94.     }
复制代码
注:如果是谷歌服务等更新,则不必要输入暗码,直接安装。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4