Parcourir la source

兼容3288升级并优化升级流程

weizhengliang il y a 3 ans
Parent
commit
a6747dfa4e

+ 45 - 9
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/AppUpdateActivity.kt

@@ -1,9 +1,12 @@
 package com.wdkl.app.ncs.callingdoor.activity
 
+import android.content.Intent
+import android.os.Build
 import android.text.TextUtils
 import android.util.Log
 import com.enation.javashop.android.jrouter.external.annotation.Router
 import com.enation.javashop.net.engine.model.NetState
+import com.example.yf_rk3288_api.YF_RK3288_API_Manager
 import com.wdkl.app.ncs.callingdoor.R
 import com.wdkl.app.ncs.callingdoor.databinding.UpdateLayBinding
 import com.wdkl.app.ncs.callingdoor.helper.AppUpdateHelper
@@ -17,6 +20,7 @@ import com.wdkl.ncs.android.middleware.common.Constant
 import com.wdkl.ncs.android.middleware.logic.contract.callingdoor.AppUpdateContract
 import com.wdkl.ncs.android.middleware.logic.presenter.callingdoor.AppUpdatePresenter
 import kotlinx.android.synthetic.main.update_lay.*
+import java.io.File
 
 @Router(path = "/callingdoor/update")
 class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), AppUpdateContract.View {
@@ -33,6 +37,7 @@ class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), A
     }
 
     override fun init() {
+        Constant.APP_UPDATING = true
         if (!TextUtils.isEmpty(Constant.APP_PATH)) {
             val downloadPath = urlManager.base + Constant.APP_PATH
             Log.e(TAG, "start download: $downloadPath")
@@ -49,17 +54,36 @@ class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), A
     fun downLoadAPK(url: String) {
         Log.d(TAG, "downLoadAPK  url==$url")
         activity_appupdate_dialog_progressview.setCurProgress(0)
-        HttpHelper.download(url, object : HttpHelper.DownloadListener {
+        activity_update_version.setText(Constant.APP_PATH.substringAfterLast("/"))
+        activity_update_version.setOnLongClickListener {
+            Log.d(TAG, "downLoadAPK cancel...")
+            HttpHelper.cancelRequestByTag(TAG)
+            activity.finish()
+
+            return@setOnLongClickListener true
+        }
+
+        HttpHelper.download(url, TAG, object : HttpHelper.DownloadListener {
             override fun onDownloadSuccess() {
                 Log.d("download", "onDownloadSuccess==" + "成功")
                 if (Constant.silentUpdate) {
                     runOnUiThread {
-                        activity_calling_bed_text_download.text = "正在安装,请稍后..."
+                        activity_update_text_download.text = "正在安装,请稍后..."
+                    }
+                    if ("rk3288".equals(Build.MODEL)) {
+                        installApkForRk3288()
+                    } else {
+                        startInstallApk()
                     }
-                    startInstallApk()
                 } else {
-                    installApk()
-                    finish()
+                    if ("rk3288".equals(Build.MODEL)) {
+                        runOnUiThread {
+                            activity_update_text_download.text = "正在安装,请稍后..."
+                        }
+                        installApkForRk3288()
+                    } else {
+                        AppUpdateHelper.installAPK(activity)
+                    }
                 }
             }
 
@@ -99,9 +123,21 @@ class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), A
         }.start()
     }
 
-    //手动升级
-    fun installApk() {
-        AppUpdateHelper.installAPK(this)
+
+    fun installApkForRk3288() {
+        val path = AppUpdateHelper.FILE_APK_PATH + "/" + AppUpdateHelper.FILE_APK_NAME
+        if (File(path).exists()) {
+            //val yfRk3288ApiManager = YF_RK3288_API_Manager(activity)
+            //yfRk3288ApiManager.yfslientinstallapk(path)
+
+            val intent = Intent("com.android.yf_slient_install")
+            intent.putExtra("path", path)  //要静默安装的apk路径
+            intent.putExtra("isboot", true)  //安装完成后是否启动
+            sendBroadcast(intent)
+        } else {
+            showMessage("安装文件不存在,升级失败!")
+            finish()
+        }
     }
 
     override fun bindEvent() {
@@ -109,7 +145,7 @@ class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), A
     }
 
     override fun destory() {
-        //
+        Constant.APP_UPDATING = false
     }
 
     //数据加载错误

+ 3 - 4
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/CallingdoorActivity.kt

@@ -79,7 +79,6 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
     private var skyCallFragment: Fragment? = null
 
     private var initialized :Boolean = false
-    private var updating :Boolean = false
     private var loaded: Boolean = false
 
     private var nursingInteId: Int? = null
@@ -479,10 +478,10 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         showMessage("获取版本成功,当前版本: " + BuildConfig.VERSION_NAME + "_" + BuildConfig.VERSION_CODE + ", 服务器版本: " + newAppVersion + "_" + appInfo.versionNo)
 
         if (BuildConfig.VERSION_CODE < appInfo.versionNo) {
-            if (!updating) {
-                showMessage("即将升级...")
+            if (!Constant.APP_UPDATING) {
+                showMessage("正在升级...")
+                Constant.APP_UPDATING = true
                 Constant.APP_PATH = appInfo.appPath
-                updating = true
                 AppTool.Time.delay(200) {
                     push("/callingdoor/update")
                 }

+ 34 - 6
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/helper/HttpHelper.java

@@ -20,23 +20,28 @@ import static com.wdkl.app.ncs.callingdoor.helper.AppUpdateHelper.FILE_APK_NAME;
 import static com.wdkl.app.ncs.callingdoor.helper.AppUpdateHelper.FILE_APK_PATH;
 
 public class HttpHelper {
+    private static OkHttpClient okHttpClient = null;
 
     /**
      * @param url   服务器地址
      * @param file  所要上传的文件
      */
-    public static void upload(String url, File file, UploadCallback callback) {
-        OkHttpClient client = new OkHttpClient();
+    public static void upload(String url, File file, Object tag, UploadCallback callback) {
+        if (okHttpClient == null) {
+            okHttpClient = new OkHttpClient();
+        }
+
         RequestBody requestBody = new MultipartBody.Builder()
                 .setType(MultipartBody.FORM)
                 .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file))
                 .build();
         Request request = new Request.Builder()
                 .url(url)
+                .tag(tag)
                 .post(requestBody)
                 .build();
 
-        client.newCall(request).enqueue(new Callback() {
+        okHttpClient.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
                 if (callback != null) {
@@ -62,9 +67,16 @@ public class HttpHelper {
         });
     }
 
-    public static void download(String url, final DownloadListener listener) {
-        Request request = new Request.Builder().url(url).build();
-        OkHttpClient okHttpClient = new OkHttpClient();
+    public static void download(String url, Object tag, final DownloadListener listener) {
+        if (okHttpClient == null) {
+            okHttpClient = new OkHttpClient();
+        }
+
+        Request request = new Request.Builder()
+                .url(url)
+                .tag(tag)
+                .build();
+
         okHttpClient.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
@@ -121,6 +133,22 @@ public class HttpHelper {
         });
     }
 
+    public static void cancelRequestByTag(Object tag) {
+        if (okHttpClient != null && tag != null) {
+            for (Call call : okHttpClient.dispatcher().queuedCalls()) {
+                if (tag.equals(call.request().tag())) {
+                    call.cancel();
+                }
+            }
+
+            for (Call call : okHttpClient.dispatcher().runningCalls()) {
+                if (tag.equals(call.request().tag())) {
+                    call.cancel();
+                }
+            }
+        }
+    }
+
     private static String isHaveExistDir(File downloadFile, File sonFile) throws IOException {
         Log.d("download", "downloadFile.mkdirs()==" + downloadFile.mkdirs());
         Log.d("download", "sonFile.mkdir()==" + sonFile.mkdir());

+ 1 - 1
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/helper/XCrashUtils.java

@@ -138,7 +138,7 @@ public class XCrashUtils {
         if (logFile.exists()) {
             final UrlManager urlManager = UrlManager.Companion.build();
             String url = urlManager.getBuyer() + "ncs/upload/file";
-            HttpHelper.upload(url, logFile, new HttpHelper.UploadCallback() {
+            HttpHelper.upload(url, logFile, TAG, new HttpHelper.UploadCallback() {
                 @Override
                 public void onFail() {
                     Log.e(TAG,"错误日志文件上传失败!");

+ 11 - 1
callingdoor/src/main/res/layout/update_lay.xml

@@ -8,7 +8,7 @@
         android:orientation="vertical">
 
         <TextView
-            android:id="@+id/activity_calling_bed_text_download"
+            android:id="@+id/activity_update_text_download"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_centerInParent="true"
@@ -16,6 +16,16 @@
             android:textColor="#3D3D63"
             android:textSize="30sp" />
 
+        <TextView
+            android:id="@+id/activity_update_version"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/activity_update_text_download"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="40dp"
+            android:text="V--"
+            android:textSize="20sp"/>
+
         <com.wdkl.ncs.android.lib.widget.ProgressView
             android:id="@+id/activity_appupdate_dialog_progressview"
             android:layout_width="match_parent"

+ 6 - 0
callingdoor/src/main/res/xml/apk_file_path.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths>
+    <external-path
+        name="external"
+        path="/CallingDoor" />
+</paths>

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.middleware.common;
 public class Constant {
 
     public static String APP_PATH = "";
+    public static Boolean APP_UPDATING = false;
 
     //TCP服务器地址:
     public static String TCP_SERVER_URL = "";