Android11 MTK 安装apk时进行密码验证

news/2025/1/15 21:54:13/

1、客户需求

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

2、解决

	路径:frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java	
private void showConfirmPwd(final InstallArgs args, final int currentStatus){mHandler.post(new Runnable(){@Overridepublic void run(){AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setCancelable(false);builder.setTitle(R.string.pwd_dialog_title);final EditText et = new EditText(mContext);builder.setView(et);builder.setPositiveButton(R.string.pwd_sure, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {String etPwd = et.getText().toString();if(etPwd == null || etPwd.equals("")){inputCount++;if(inputCount >= 3){processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );}else{Toast.makeText(mContext,R.string.pwd_dialog_title,Toast.LENGTH_SHORT).show();showConfirmPwd(mLzyArgs,mLzyCurrentStatus);}}else{if(!etPwd.equals(android.provider.Settings.System.getString(mContext.getContentResolver(),android.provider.Settings.System.SYS_PASSWORD))){inputCount++;if(inputCount >= 3){processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );}else{Toast.makeText(mContext, R.string.pwd_correct,Toast.LENGTH_LONG).show();showConfirmPwd(mLzyArgs,mLzyCurrentStatus);}}else{dialog.dismiss();processPendingInstall2(args,currentStatus);}}}});builder.setNegativeButton(R.string.pwd_cancel, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {dialog.dismiss();processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED );}});dialog = builder.create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);dialog.show();}});}private String getInstallPkgName(InstallArgs args){PackageParser parser = new PackageParser();if((args.getCodePath() == null) || (args.getCodePath().equals(""))){return null;}try {PackageParser.Package pkg = parser.parsePackage(new File(args.getCodePath()), 0, true);return pkg.packageName; // 返回包名} catch (PackageParser.PackageParserException e) {// 处理异常,例如打印错误日志Log.d("InstallArgs", "Unable to parse package at " + args.getCodePath(), e);return null;}}private InstallArgs mLzyArgs;private int mLzyCurrentStatus;private int inputCount = 0;private void processPendingInstall(final InstallArgs args, final int currentStatus) {mLzyArgs = args;mLzyCurrentStatus = currentStatus;String mInstallPackageName = getInstallPkgName(args);if(mInstallPackageName == null){processPendingInstall2(args,PackageManager.INSTALL_FAILED_USER_RESTRICTED);}else if (mInstallPackageName.equals("com.android.vending") || mInstallPackageName.equals("com.google.android.gms")){processPendingInstall2(args,currentStatus);}else{inputCount = 0;showConfirmPwd(args,currentStatus);}}private void processPendingInstall2(final InstallArgs args, final int currentStatus) {if (args.mMultiPackageInstallParams != null) {args.mMultiPackageInstallParams.tryProcessInstallRequest(args, currentStatus);} else {PackageInstalledInfo res = createPackageInstalledInfo(currentStatus);processInstallRequestsAsync(res.returnCode == PackageManager.INSTALL_SUCCEEDED,Collections.singletonList(new InstallRequest(args, res)));}}

注:如果是谷歌服务等更新,则不需要输入密码,直接安装。


http://www.ppmy.cn/news/1520968.html

相关文章

Prometheus与Grafana入门:从安装到基础监控的完整指南

Prometheus与Grafana入门:从安装到基础监控的完整指南 Prometheus 和 Grafana 是现代监控系统的黄金组合。Prometheus 作为一个开源的监控系统和时间序列数据库,以其强大的指标收集和查询能力广泛应用于云原生环境。而 Grafana 则是一个用于数据可视化和…

SQL Server 中 事务( Transaction )

在 SQL Server 中,Transaction(事务)是一种处理单位,它由一系列操作组成,这些操作要么全部成功,要么全部失败。事务是数据库管理系统中的一个核心概念,用于确保数据的完整性和一致性。 事务具有…

Linux 进程等待与替换

✏️ 代码引入&#xff1a; #include <stdio.h> #include <unistd.h> // _exit()要此头文件&#xff0c;使用方法与 exit()类似 #include <stdlib.h> // exit(),要此头文件// int fun() //{ // printf("call fun function done!\n"); // retu…

使用 Monai Bundle 和 Model Zoo 对医学影像数据进行分类-全脑133个结构分割

使用 Monai Bundle 和 Model Zoo 对医学影像数据进行分类-全脑133个结构分割 文章目录 导读Monai Bundle 和 Model Zoo简单介绍基于monai bundle的MRI全脑分割模型简介模型描述模型训练细节训练数据注意事项电脑配置完整的133个脑结构列表在3D slicer使用全脑结构分割模型完整的…

MySQL数据备份策略审计:确保数据安全与合规性

在企业环境中&#xff0c;数据备份策略的审计是确保数据安全、提高数据管理效率和满足合规要求的重要环节。MySQL作为广泛使用的数据库系统&#xff0c;其备份策略的审计可以帮助组织验证备份操作的有效性、监控备份过程并确保数据的完整性和可用性。本文将详细介绍如何在MySQL…

解决:axios 请求头url传参数组时发生400错误

一、前言 axios封装的网络请求&#xff0c;url传参时&#xff0c;数组作为参数传递&#xff0c;发生400错误请求时数组参数转url会保留 [] 二、原因 RFC3986&#xff1a;除了 数字 字母 -_.~ 不会被转义&#xff0c;其他字符都会被以百分号&#xff08;%&#xff09;后跟两位…

【Python机器学习】NLP词频背后的含义——距离和相似度

我们可以使用相似度评分&#xff08;和距离&#xff09;&#xff0c;根据两篇文档的表示向量间的相似度&#xff08;或距离&#xff09;来判断文档间有多相似。 我们可以使用相似度评分&#xff08;和举例&#xff09;来查看LSA主题模型与高维TF-IDF模型之间的一致性。在去掉了…

Spring Cloud LoadBalancer

1. 快速上手 SpringCloud 从 2020.0.1版本开始,移除了Ribbon 组件&#xff0c;使用Spring Cloud LoadBalancer 组件来代替 Ribbon 实现客户端负载均衡. 1.1 使用Spring Cloud LoadBalancer实现负载均衡 给 RestTemplate 这个Bean添加 LoadBalanced 注解就可以 Configuratio…