瀏覽代碼

<适配rk3368 8.1版本升级程序>

weizhengliang 4 年之前
父節點
當前提交
e11e94d9a0

+ 1 - 2
app/src/main/AndroidManifest.xml

@@ -3,13 +3,12 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:sharedUserId="android.uid.system"
     package="com.wdkl.callingdoor">
-
     <!--android:sharedUserId="android.uid.system"-->
 
-    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
 
     <!-- Android8.0未知来源权限 -->
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
+    <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
     <!-- silentUpdate -->
     <uses-permission
         android:name="android.permission."

+ 10 - 2
app/src/main/java/com/wdkl/callingdoor/ui/APPUpdateActivity.java

@@ -1,6 +1,7 @@
 package com.wdkl.callingdoor.ui;
 
 import android.annotation.SuppressLint;
+import android.os.Build;
 import android.os.Handler;
 import android.os.Message;
 import android.widget.TextView;
@@ -12,6 +13,7 @@ import com.wdkl.callingdoor.util.DownloadUtil;
 import com.wdkl.callingdoor.util.DownloadUtils;
 import com.wdkl.callingdoor.util.LogUtil;
 import com.wdkl.callingdoor.util.StringUtils;
+import com.wdkl.callingdoor.util.ToastUtil;
 import com.wdkl.callingdoor.util.silentupdate.SilentUpdateUtil;
 import com.wdkl.callingdoor.widget.view.ProgressView;
 
@@ -95,8 +97,14 @@ public class APPUpdateActivity extends BaseActivity implements SilentUpdateUtil.
                 case APP_UPDATE_SUCSSED:
                     text_download_infomation.setText("程序正在安装中请勿断电!");
                     //升级
-                    //new SilentUpdateUtil().updateApk(APPUpdateActivity.this).setInstallCallBack(APPUpdateActivity.this);//静默升级
-                    new DownloadUtils(APPUpdateActivity.this).installAPK(DownloadUtil.FILE_APK_PATH + "/" + DownloadUtil.FILE_APK_NAME); //智能升级
+                    DownloadUtils downloadUtils = new DownloadUtils(APPUpdateActivity.this);
+                    if (Build.VERSION.SDK_INT >= 26) {
+                        if (downloadUtils.silentInstall(DownloadUtil.FILE_APK_PATH + "/" + DownloadUtil.FILE_APK_NAME)) {
+                            ToastUtil.showToast("升级成功,即将重启!");
+                        }
+                    } else {
+                        downloadUtils.installAPK(DownloadUtil.FILE_APK_PATH + "/" + DownloadUtil.FILE_APK_NAME); //智能升级
+                    }
                     APPUpdateActivity.this.finish();
                     break;
                 case APP_UPDATE_ING:

+ 27 - 0
app/src/main/java/com/wdkl/callingdoor/util/DownloadUtils.java

@@ -5,6 +5,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Build;
@@ -15,6 +16,8 @@ import android.widget.Toast;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
 
 /**
  * 类名称:DownloadUtil <br>
@@ -135,6 +138,30 @@ public class DownloadUtils {
 
     }
 
+    public boolean silentInstall(String apkPath) {
+        PackageManager packageManager = mContext.getPackageManager();
+        Class pmClz = packageManager.getClass();
+        try {
+            if (Build.VERSION.SDK_INT >= 21) {
+                Class aClass = Class.forName("android.app.PackageInstallObserver");
+                Constructor constructor = aClass.getDeclaredConstructor();
+                constructor.setAccessible(true);
+                Object installObserver = constructor.newInstance();
+                Method method = pmClz.getDeclaredMethod("installPackage", Uri.class, aClass, int.class, String.class);
+                method.setAccessible(true);
+                method.invoke(packageManager, Uri.fromFile(new File(apkPath)), installObserver, 2, null);
+            } else {
+                Method method = pmClz.getDeclaredMethod("installPackage", Uri.class, Class.forName("android.content.pm.IPackageInstallObserver"), int.class, String.class);
+                method.setAccessible(true);
+                method.invoke(packageManager, Uri.fromFile(new File(apkPath)), null, 2, null);
+            }
+            return true;
+        } catch (Exception e) {
+            LogUtil.e("install", e.toString());
+        }
+        return false;
+    }
+
     //修改文件权限
     public void setPermission(String absolutePath) {
         String command = "chmod " + "777" + " " + absolutePath;