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

news/2024/9/20 4:46:17/ 标签: android

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…

OCI编程高级篇(十九) 创建和使用OCI连接池

上一节介绍了连接池的概念和使用连接池的步骤&#xff0c;这一节看看具体的操作是怎样的&#xff0c;先看一下用到的函数原型和参数。 创建连接池函数OCIConnectionPoolCreate()&#xff0c;原型和参数如下。 sword OCIConnectionPoolCreate ( OCIEnv *envhp, OCIError …

css中设定长度的例外情况

看下面的例子&#xff1a; div { font-size: 40px; width: 10em; /* 400px */ height: 10em; border: solid 1px black; } p { font-size: 0.5em; /* 20px */ width: 10em; /* 200px */ height: 10em; border: solid 1px red; } span { font-size: 0.5em; width…

Linux【6】系统

时间日期 date日期 cal——当月日历 cal -y 今年的日历 磁盘占用df du df 剩余空间 du 目录下的文件大小 进程ps ps aux a——其他用户 u——详细状态 x——没有控制终端 只看CPU占用高的进程top kill pid代号 ——杀死程序 通配符&#xff08;简略版&#xff09; …

【ISSCC】论文详解-34.6 28nm 72.12TFLOPS/W混合存内计算架构

本文介绍ISSCC34.6文章&#xff0c;题目是《A 28nm 72.12TFLOPS/W Hybrid-Domain Outer-Product Based Floating-Point SRAM Computing-in-Memory Macro with Logarithm Bit-Width Residual ADC》&#xff08;一种28nm 72.12TFLOPS/W混合域外积浮点SRAM存内计算宏单元&#xff…

使用 ELK Stack 进行云原生日志记录和监控:AWS 中的开发运营方法

使用 ELK Stack 进行云原生日志记录和监控 欢迎来到雲闪世界。在当今的云原生世界中&#xff0c;日志记录和监控是强大的 DevOps 策略的重要组成部分。监控应用程序性能、跟踪错误和分析日志对于确保无缝操作和主动识别潜在问题至关重要。在本文中&#xff0c;我们将指导您使用…

哈希表与统计——594、350、554、609、454(2简3中)

594. 最长和谐子序列&#xff08;简单&#xff09; 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在&#xff0c;给你一个整数数组 nums &#xff0c;请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列&a…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)1.9-1.10

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第一周 卷积神经网络&#xff08;Foundations of Convolutional Neural Networks&#xff09;1.9 池化层&#xff08;Pooling layers&#xff09;1.10 卷 积 神 经 网 络 示 例 &#xff08; …

如何为零售行业构建有效的勒索病毒防御体系

在数字化转型的浪潮中&#xff0c;零售业越来越多地依赖于网络技术来提升客户体验和运营效率。然而&#xff0c;这也使得零售商面临着网络安全的新挑战&#xff0c;尤其是勒索软件攻击。勒索软件是一种恶意软件&#xff0c;它会加密受害者的数据&#xff0c;并要求支付赎金以换…

kubernetes 中 利用yaml文件部署应用

目录 1 用yaml文件部署应用有以下优点 1.1 声明式配置&#xff1a; 1.2 灵活性和可扩展性&#xff1a; 1.3 与工具集成&#xff1a; 2 资源清单参数介绍 2.1 获得资源帮助指令explain 2.2 编写示例 2.2.1 示例1&#xff1a;运行简单的单个容器pod 2.2.2 示例2&#xff1a;运行…

电路基础 ---- 旁路电容与去耦电容的区别

1. 旁路电容&#xff08;Bypass Capacitor&#xff09; 功能&#xff1a; 旁路电容主要用于为电路中的高频噪声提供一个低阻抗路径&#xff0c;以防止这些高频噪声进入电源线。它通过旁路高频信号&#xff08;如电源中的噪声或电路切换产生的尖峰信号&#xff09;来稳定电压。…

互惠链接对于SEO来说是好是坏?

什么是互惠链接&#xff1f; 互惠链接是两个网站之间的双向链接。 网站 A 链接到网站 B&#xff0c;网站 B 也链接回网站 A。 例如&#xff0c;两个网站都发布对彼此有利且与各自受众相关的内容。每个网站都认识到对方内容的价值&#xff0c;从而建立相互链接。 互惠链接对…

.NET/C#⾯试题汇总系列:基础语法

1. 字符串中string strnull和string str""和string strstring.Empty的区别&#xff1f; string str null;&#xff1a;这种方式声明了一个字符串变量str&#xff0c;并将其初始化为null。这意味着str不指向任何实际的字符串对象。如果你试图访问str的属性或方法&…