Browse Source

app启动时检查launch版本,若版本低于1.3则升级

weizhengliang 3 năm trước cách đây
mục cha
commit
cc7e60faca

BIN
callingdoor/src/main/assets/launch.apk


+ 72 - 7
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/CallingdoorActivity.kt

@@ -3,10 +3,7 @@ package com.wdkl.app.ncs.callingdoor.activity
 import android.app.AlarmManager
 import android.content.*
 import android.net.ConnectivityManager
-import android.os.Build
-import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
+import android.os.*
 import android.support.v4.app.Fragment
 import android.text.TextUtils
 import android.util.Log
@@ -69,9 +66,8 @@ import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import serialporttest.utils.SerialPortUtil
-import java.io.DataOutputStream
-import java.io.IOException
-import java.io.PrintWriter
+import java.io.*
+import java.lang.Process
 import java.util.concurrent.TimeUnit
 
 
@@ -112,6 +108,7 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
 
     private var serverSuccess = false
     private var cancelRestart = false
+    private var copyDone = false
 
     private val handler by lazy { Handler(Looper.getMainLooper()) }
 
@@ -203,6 +200,10 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         }
 
         checkServer()
+
+        if ("rk3128".equals(Build.MODEL)) {
+            checkLaunch()
+        }
     }
 
     private fun checkAppExist() : Boolean {
@@ -234,6 +235,70 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         }
     }
 
+    //检查launch版本
+    private fun checkLaunch() {
+        Log.d(TAG, "start check launch")
+        val pm = packageManager
+        val packageInfo = pm.getInstalledPackages(0)
+        var launchExist = false
+        for (pInfo in packageInfo) {
+            val launchName = "com.wdkl.launch"
+            val launchVersion = "1.3"
+            if (launchName == pInfo.packageName) {
+                launchExist = true
+                Log.d(TAG, "start check launch app: " + pInfo.versionName)
+                if (launchVersion != pInfo.versionName) {
+                    Log.d(TAG, "need update launch, app name: " + pInfo.packageName + ", app version: " + pInfo.versionName)
+                    updateLaunchApk()
+                }
+            }
+        }
+        Log.d(TAG, "launch app exist: $launchExist")
+    }
+
+    private fun updateLaunchApk() {
+        Thread {
+            val apkName = "launch.apk"
+            copyAssetsToDst(applicationContext, apkName, Environment.getExternalStorageDirectory().path + "/" + Environment.DIRECTORY_DOWNLOADS)
+            if (copyDone) {
+                val fileName = Environment.getExternalStorageDirectory().path + "/" + Environment.DIRECTORY_DOWNLOADS + "/" + apkName
+                //升级
+                AppUpdateHelper.rootSilenceInstall(fileName)
+                //5分钟后重启设备
+                AppTool.Time.delay(300000) {
+                    AppUpdateHelper.reboot(BaseApplication.appContext)
+                }
+            }
+        }.start()
+    }
+
+    //拷贝assets下面的文件到sd卡
+    private fun copyAssetsToDst(context: Context, fileName: String, dstPath: String) {
+        try {
+            copyDone = false
+            val file = File(dstPath)
+            if (!file.exists()) {
+                file.mkdirs()
+            }
+            val outFile = File("$dstPath/$fileName")
+            val `is` = context.assets.open(fileName)
+            val fos = FileOutputStream(outFile)
+            val buffer = ByteArray(1024)
+            var byteCount: Int
+            while (`is`.read(buffer).also { byteCount = it } != -1) {
+                fos.write(buffer, 0, byteCount)
+            }
+            fos.flush()
+            `is`.close()
+            fos.close()
+            copyDone = true
+        } catch (e: java.lang.Exception) {
+            copyDone = false
+            e.printStackTrace()
+        }
+    }
+
+
     private fun checkServer() {
         Thread {
             while (!serverSuccess) {