马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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(){
- @Override
- public 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() {
- @Override
- public 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() {
- @Override
- public 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)));
- }
- }
复制代码 注:如果是谷歌服务等更新,则不必要输入暗码,直接安装。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |