From 683b1595260e638d1d3c6cc0d6543a72f6d6f925 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 12 一月 2021 14:36:42 +0800
Subject: [PATCH] 扣分码标准化

---
 lib/src/main/java/com/anyun/exam/lib/InstallUtil.java |   90 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java b/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
index c2a0b8d..bbba352 100644
--- a/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
+++ b/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
@@ -1,9 +1,14 @@
 package com.anyun.exam.lib;
 
+import android.Manifest;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.Signature;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
 import android.util.Log;
 
 import java.io.ByteArrayOutputStream;
@@ -14,6 +19,10 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Locale;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.FileProvider;
 
 public class InstallUtil {
     public static final String TAG = InstallUtil.class.getCanonicalName();
@@ -144,23 +153,59 @@
             try {
                 Log.d(TAG, "鍗囩骇app 鏂囦欢瀛樺湪 褰撳墠ver " + getVerCode() + " 褰撳墠Name " + getVerName() + " 鐩爣ver " + getVersionCodeFromApk(context, file.getAbsolutePath()) + " 鐩爣name " + getVersionNameFromApk(context, file.getAbsolutePath()));
 
-//                Signature[] sig = getSignature();
-//                Signature[] sig2 = getSignature(file.getAbsolutePath());
+                Signature[] sig = getSignature();
+                Signature[] sig2 = getSignature(file.getAbsolutePath());
 
-                /*if ( getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1")))*/ {
-                    if ( getVerCode() <= getVersionCodeFromApk(context, file.getAbsolutePath()) ) {
+                if ( getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1"))) {
+                    if ( getVerCode() < getVersionCodeFromApk(context, file.getAbsolutePath()) ||
+                            (getVerCode() == getVersionCodeFromApk(context, file.getAbsolutePath()) &&
+                                    !getVerName().equals(getVersionNameFromApk(context, file.getAbsolutePath())))) {
                         Log.d(TAG, "瀹夎鏂囦欢  " + file.getAbsolutePath());
                         String result = execCommand("pm", "install", "-i", getPackageName(), "--user", "0", "-r", "-d", file.getAbsolutePath());
                         Log.d(TAG, "瀹夎缁撴灉  " + result);
                     } else {
                         file.delete();
                     }
-                } /*else {
+                } else {
                     file.delete();
-                }*/
+                }
             } catch (Exception e) {
                 Log.e(TAG, "瀹夎鍙戠敓閿欒 " + e.getMessage());
             }
+        }
+    }
+
+    public void InstallAppNormal(Context context, String path) {
+        File file = new File(path);
+        Log.d(TAG, "ManualInstall " + path);
+
+        if (file.exists() && file.isFile()) {
+            Signature[] sig = getSignature();
+            Signature[] sig2 = getSignature(file.getAbsolutePath());
+
+            if (getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1")) &&
+                    (getVerCode() < getVersionCodeFromApk(context, file.getAbsolutePath()) ||
+                    (getVerCode() == getVersionCodeFromApk(context, file.getAbsolutePath()) &&
+                            !getVerName().equals(getVersionNameFromApk(context, file.getAbsolutePath()))))) {
+
+                Intent intent = new Intent(Intent.ACTION_VIEW);
+                Uri data;
+                String type = "application/vnd.android.package-archive";
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+                    data = Uri.fromFile(file);
+                } else {
+                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                    String authority = context.getPackageName() + ".fileProvider";
+                    data = FileProvider.getUriForFile(context, authority, file);
+                }
+                intent.setDataAndType(data, type);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                context.startActivity(intent);
+            } else {
+                Log.d(TAG, "File illegal");
+            }
+        } else {
+            Log.d(TAG, "File not exist");
         }
     }
 
@@ -223,4 +268,37 @@
         }
         return result;
     }
+
+/*
+    private void checkIsAndroidO() {
+        if (Build.VERSION.SDK_INT >= 26) {
+            if (context.getPackageManager().canRequestPackageInstalls()) {
+                mMainPresenter.installApk();
+            } else {
+                //璇锋眰瀹夎鏈煡搴旂敤鏉ユ簮鐨勬潈闄�
+                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES},INSTALL_PACKAGES_REQUEST_CODE);
+            }
+        } else {
+            mMainPresenter.installApk();
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        switch (requestCode) {
+            case INSTALL_PACKAGES_REQUEST_CODE:
+                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    mMainPresenter.installApk();
+                } else {
+                    //  寮曞鐢ㄦ埛鎵嬪姩寮�鍚畨瑁呮潈闄�
+                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
+                    startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
+                }
+                break;
+            default:
+                break;
+
+        }
+    }*/
 }

--
Gitblit v1.8.0