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