Quellcode durchsuchen

内置云派app升级安装启动服务,若设备没有安装该服务apk则自动安装并且需要重启应用来启动该服务

weizhengliang vor 3 Jahren
Ursprung
Commit
905d976352

+ 1 - 1
app/build.gradle

@@ -29,7 +29,7 @@ android {
     buildToolsVersion build_tools_version
     aaptOptions.cruncherEnabled = false
     aaptOptions.useNewCruncher = false
-    aaptOptions.noCompress("mp3","wav")
+    aaptOptions.noCompress("mp3","wav", "apk")
 
     defaultConfig {
         applicationId "com.wdkl.app.ncs.nursehost"

BIN
nursehome/src/main/assets/yunpai_launch_app.apk


+ 85 - 21
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -2,17 +2,12 @@ package com.wdkl.ncs.android.component.nursehome.activity
 
 import android.Manifest
 import android.app.NotificationManager
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import android.content.IntentFilter
+import android.content.*
+import android.content.pm.PackageManager
 import android.graphics.Color
 import android.net.ConnectivityManager
 import android.net.Uri
-import android.os.Build
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.os.Handler
+import android.os.*
 import android.provider.Settings
 import android.support.v4.app.Fragment
 import android.support.v4.app.FragmentManager
@@ -53,13 +48,13 @@ import com.wdkl.ncs.android.middleware.model.dos.AppVersionDO
 import com.wdkl.ncs.android.middleware.model.dos.DeviceDO
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
-import com.wdkl.ncs.android.middleware.model.vo.CallingHistoryVO
-import com.wdkl.ncs.android.middleware.model.vo.FrameBedVO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.model.vo.NurseDeviceInfoVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
-import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
-import com.wdkl.ncs.android.middleware.tcp.channel.*
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
+import com.wdkl.ncs.android.middleware.tcp.channel.EntraceGuardUtil
+import com.wdkl.ncs.android.middleware.tcp.channel.VideoUtil
+import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
@@ -72,7 +67,9 @@ import kotlinx.android.synthetic.main.activity_nurse_home.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
-import java.lang.StringBuilder
+import java.io.File
+import java.io.FileOutputStream
+import java.io.InputStream
 import java.util.*
 import java.util.concurrent.Executors
 import java.util.concurrent.ScheduledExecutorService
@@ -162,14 +159,8 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
 
         if ("YUNPAI_H6".equals(Build.MODEL) || "YUNPAI_H6B".equals(Build.MODEL)) {
             Constants.device_serial_id = Constants.imei
-
-            val intent = Intent()
-            intent.setClassName("com.wd.app", "com.wd.app.MyService")
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-                //android8.0以上通过startForegroundService启动service
-                startForegroundService(intent)
-            } else {
-                startService(intent)
+            if ("YUNPAI_H6".equals(Build.MODEL)) {
+                startYunpaiPlugin()
             }
         } else {
             Constants.device_serial_id = Constants.mac
@@ -223,6 +214,79 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
         }
     }
 
+    private fun startYunpaiPlugin() {
+        try {
+            val packageInfos = packageManager.getInstalledPackages(
+                PackageManager.GET_ACTIVITIES or
+                        PackageManager.GET_SERVICES
+            )
+            var needInstall = false
+            for (info in packageInfos) {
+                val pkg = info.packageName
+                if (pkg.equals("com.wd.app")) {
+                    //启动云派app升级监听服务
+                    val intent = Intent()
+                    intent.setClassName("com.wd.app", "com.wd.app.MyService")
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                        //android8.0以上通过startForegroundService启动service
+                        startForegroundService(intent)
+                    } else {
+                        startService(intent)
+                    }
+                    needInstall = false
+                    break
+                } else {
+                    needInstall = true
+                }
+            }
+
+            if (needInstall) {
+                //拷贝并安装云派app升级服务apk
+                Log.d(TAG,"准备安装升级服务apk")
+                Thread{
+                    try {
+                        val fileName = "yunpai_launch_app.apk"
+                        val dstPath = Environment.getExternalStorageDirectory().path + "/Download"
+                        val file = File(dstPath)
+                        if (!file.exists()) {
+                            file.mkdirs()
+                        }
+                        val outFile = File(dstPath + "/" + fileName)
+                        if (outFile.exists()) {
+                            outFile.delete()
+                        }
+                        val inputStream: InputStream = getAssets().open(fileName)
+                        val fos = FileOutputStream(outFile)
+                        val buffer = ByteArray(1024)
+                        var byteCount = 0
+                        while (inputStream.read(buffer).also { byteCount = it } != -1) {
+                            fos.write(buffer, 0, byteCount)
+                        }
+                        fos.flush()
+                        inputStream.close()
+                        fos.close()
+
+                        //apk拷贝完成,即将安装
+                        val action = "com.miki.slient.INSTALL_CUSTOMER_PACKAGES"
+                        val intent = Intent(action)
+                        intent.putExtra("apkPath", dstPath + "/" + fileName)
+                        intent.putExtra("packageName", "com.miki.sensortest")
+                        sendBroadcast(intent)
+
+                        runOnUiThread {
+                            showMessage("app升级服务正在安装,请稍后重启设备以完成升级服务启动")
+                        }
+                    } catch (e: java.lang.Exception) {
+                        e.printStackTrace()
+                    }
+                }.start()
+            }
+        } catch (t: Throwable) {
+            t.printStackTrace()
+            showMessage("启动升级插件服务失败: " + t.message)
+        }
+    }
+
     private fun reload() {
         handler.postDelayed({
             if (permissionGrant) {