Procházet zdrojové kódy

1.修改下载和安装方法

20241218TB223FC(测试jar包)
wangwanlei před 10 měsíci
rodič
revize
e4127a4f8c

+ 2
- 1
app/src/main/java/com/xhly/manageapp/ManageApplication.kt Zobrazit soubor

@@ -74,11 +74,12 @@ class ManageApplication : MultiDexApplication() {
74 74
          */
75 75
 
76 76
         fun installPackage(string: String) {
77
+            enableAllUnkownsourcesV3(true)
77 78
             val installPackageWhiteList = getInstallPackageWhiteList()
78 79
             installPackageWhiteList.add(string)
79 80
             addInstallPackageWhiteList(installPackageWhiteList)
80 81
             if (ModelNameUtils.IS_LianxX505f()) {
81
-                LogShow("开始安装$string")
82
+                LogShow("开始安装$string"+File(string).exists())
82 83
                 csdkManager?.installPackage(string)
83 84
             } else {
84 85
                 instance?.let {

+ 2
- 0
app/src/main/java/com/xhly/manageapp/broadcastreceiver/AppInstallReceiver.kt Zobrazit soubor

@@ -8,6 +8,7 @@ import android.util.Log
8 8
 import android.widget.Toast
9 9
 import com.xhly.corelib.Const
10 10
 import com.xhly.corelib.eventbus.UIEvent
11
+import com.xhly.manageapp.utils.InstallUtils
11 12
 
12 13
 //(自定义广播类)  --自己命名的 XXXXReceiver
13 14
 class AppInstallReceiver : BroadcastReceiver() {
@@ -19,6 +20,7 @@ class AppInstallReceiver : BroadcastReceiver() {
19 20
             val packageName = intent.data!!.schemeSpecificPart
20 21
             Log.i(TAG, "--------安装成功$packageName")
21 22
             //Toast.makeText(context, "安装成功$packageName", Toast.LENGTH_LONG).show()
23
+            InstallUtils.installSuccess(packageName)
22 24
             UIEvent(Const.APPINSTALL).setMessage(packageName).post()
23 25
         } else if (TextUtils.equals(intent.action, Intent.ACTION_PACKAGE_REPLACED)) {
24 26
             val packageName = intent.data!!.schemeSpecificPart

+ 2
- 2
app/src/main/java/com/xhly/manageapp/ui/ManageActivity.kt Zobrazit soubor

@@ -160,7 +160,7 @@ class ManageActivity : BaseActivity<BaseViewModel, ActivityManageBinding>() {
160 160
         }
161 161
         mBinding.installBtn.setOnClickListener {
162 162
             var file = Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS)
163
-            var name = file.toString()
163
+            var name =  getExternalFilesDir(null).toString()
164 164
             var sb = StringBuffer()
165 165
             ManageApplication.getInstallPackageWhiteList().forEach {
166 166
                 sb.append("$it,")
@@ -179,7 +179,7 @@ class ManageActivity : BaseActivity<BaseViewModel, ActivityManageBinding>() {
179 179
             //ManageApplication.addInstallPackageWhiteList(arrayListOf("com.coolapk.market"))
180 180
 
181 181
            // ManageApplication.removeInstallPackageWhiteList(arrayListOf("com.coolapk.market"))
182
-            ManageApplication.installPackage(File(name, "test.apk").toString())
182
+            ManageApplication.installPackage(File(name, "英语词典.apk").toString())
183 183
             //ZJAPPUtils.installApk(this, File(name, "test.apk"))
184 184
         }
185 185
         var type10 = 0

+ 34
- 6
app/src/main/java/com/xhly/manageapp/ui/main/activity/MainActivity.kt Zobrazit soubor

@@ -73,6 +73,7 @@ import com.xhly.manageapp.ui.main.viewmodel.MainViewModel
73 73
 import com.xhly.manageapp.utils.AppDownLoadUtils
74 74
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
75 75
 import com.xhly.manageapp.utils.CustomAppUtils
76
+import com.xhly.manageapp.utils.InstallUtils
76 77
 import com.xhly.manageapp.utils.PadInfoUtils
77 78
 import com.xhly.manageapp.utils.StrategyUtils
78 79
 import com.xhly.manageapp.workmanager.TimingWorker
@@ -196,7 +197,7 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
196 197
                             FileUtils.deleteCurrentFlie(it)
197 198
                         }
198 199
                         val file = getExternalFilesDir(null)
199
-                        viewModel.viewModelScope.launch {
200
+                    /*    viewModel.viewModelScope.launch {
200 201
                             modelList.forEach { app ->
201 202
                                 try {
202 203
                                     //获得已安装的应用判断版本,未安装的则直接静默安装。
@@ -209,18 +210,42 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
209 210
                                         val currentApp = filter[0]
210 211
                                         if (app.versionNum > currentApp.versionNum) {
211 212
                                             //版本低则更新安装。
212
-                                            AppDownLoadUtils.addToDownloadQueue(apkPath, appName)
213
-                                           /* DownLoadUtils.addDownload(apkPath,appName,File(file.toString(), "$appName.apk").toString())*/
213
+                                            //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
214
+                                            DownLoadUtils.addDownload(apkPath,appName,File(file.toString(), "$appName.apk").toString(),app.appPackage)
214 215
                                         }
215 216
                                     } else {
216 217
                                         //不存在,直接下载安装。
217
-                                        AppDownLoadUtils.addToDownloadQueue(apkPath, appName)
218
-                                      /*  DownLoadUtils.addDownload(apkPath,appName,File(file.toString(), "$appName.apk").toString())*/
218
+                                        //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
219
+                                        DownLoadUtils.addDownload(apkPath,appName,File(file.toString(), "$appName.apk").toString(),app.appPackage)
219 220
                                     }
220 221
                                 } catch (e: Exception) {
221 222
                                     LogShow("问题" + e.toString())
222 223
                                 }
223 224
                             }
225
+                        }*/
226
+                        modelList.forEach { app ->
227
+                            try {
228
+                                //获得已安装的应用判断版本,未安装的则直接静默安装。
229
+                                val filter =
230
+                                    appList.filter { it.packageName.equals(app.appPackage) }
231
+                                //列表中不存在,或者版本较低则更新
232
+                                val apkPath = app.apkPath
233
+                                val appName = app.appName
234
+                                if (filter.isNotEmpty()) {
235
+                                    val currentApp = filter[0]
236
+                                    if (app.versionNum > currentApp.versionNum) {
237
+                                        //版本低则更新安装。
238
+                                        //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
239
+                                        DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
240
+                                    }
241
+                                } else {
242
+                                    //不存在,直接下载安装。
243
+                                    //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
244
+                                    DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
245
+                                }
246
+                            } catch (e: Exception) {
247
+                                LogShow("问题" + e.toString())
248
+                            }
224 249
                         }
225 250
                     } else {
226 251
                         // 用户拒绝了安装权限,处理相应逻辑
@@ -1203,7 +1228,10 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
1203 1228
 
1204 1229
     override fun onSuccess(downItem: DownloadItem) {
1205 1230
         LogShow("开始安装")
1206
-        ManageApplication.installPackage(downItem.savepath)
1231
+       /* ManageApplication.installPackage(downItem.savepath)*/
1232
+        runOnUiThread {
1233
+            InstallUtils.addInstall(downItem.savepath,downItem.pkgName)
1234
+        }
1207 1235
     }
1208 1236
 
1209 1237
     override fun onFailure(downItem: DownloadItem, errMsg: String) {

+ 8
- 10
app/src/main/java/com/xhly/manageapp/utils/AppDownLoadUtils.kt Zobrazit soubor

@@ -13,13 +13,11 @@ import java.io.File
13 13
 import java.util.LinkedList
14 14
 
15 15
 object AppDownLoadUtils {
16
-    private val downloadQueue = LinkedList<Pair<String, String>>()
17
-    //添加安装集合
18
-    var installQuene= arrayListOf<Pair<String, String>>()
16
+    private val downloadQueue = LinkedList<Triple<String, String,String>>()
19 17
 
20 18
     private var isDownloading = false
21
-    suspend fun addToDownloadQueue(url: String, appName: String) {
22
-        downloadQueue.add(Pair(url, appName))
19
+    suspend fun addToDownloadQueue(url: String, appName: String,pkgName:String) {
20
+        downloadQueue.add(Triple(url, appName,pkgName))
23 21
         if (!isDownloading) {
24 22
             startNextDownload()
25 23
         }
@@ -27,14 +25,14 @@ object AppDownLoadUtils {
27 25
 
28 26
     private suspend fun startNextDownload() {
29 27
         if (downloadQueue.isNotEmpty()) {
30
-            val (url, appName) = downloadQueue.removeFirst()
31
-            downLoadFile(url, appName)
28
+            val (url, appName,pkgName) = downloadQueue.removeFirst()
29
+            downLoadFile(url, appName,pkgName)
32 30
         } else {
33 31
             isDownloading = false
34 32
         }
35 33
     }
36 34
 
37
-    private suspend fun downLoadFile(url: String, appName: String) {
35
+    private suspend fun downLoadFile(url: String, appName: String,pkgName:String) {
38 36
         withContext(Dispatchers.IO) {
39 37
             try {
40 38
                 //val file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
@@ -55,11 +53,11 @@ object AppDownLoadUtils {
55 53
                         LogShow("下载结果" + successful)
56 54
                         if (successful) {
57 55
                            /* UIEvent(Const.INSTALL_FORCEAPP).setMessage(File(name, "$appName.apk").toString()).post()*/
58
-                            ManageApplication.installPackage(File(name, "$appName.apk").toString())
56
+                           /* ManageApplication.installPackage(File(name, "$appName.apk").toString())*/
57
+                            InstallUtils.addInstall(File(name, "$appName.apk").toString(),pkgName)
59 58
                         } else {
60 59
                             currentRetry++
61 60
                         }
62
-                        delay(1000*20)
63 61
                         LogShow("下载后,开始安装")
64 62
                     }
65 63
                 }

+ 1
- 1
app/src/main/java/com/xhly/manageapp/utils/CustomAppUtils.kt Zobrazit soubor

@@ -44,7 +44,7 @@ class CustomAppUtils {
44 44
         appList.add(getCusomAppBean(
45 45
             context.getString(R.string.netset),
46 46
             Const.WIFISEETTINGPKG,
47
-            AppCompatResources.getDrawable(context,R.drawable.icon_updatestrategy)!!
47
+            AppCompatResources.getDrawable(context,R.drawable.icon_netset)!!
48 48
         ))
49 49
         return appList
50 50
     }

+ 7
- 7
app/src/main/java/com/xhly/manageapp/utils/DownLoadUtils.kt Zobrazit soubor

@@ -37,7 +37,7 @@ object DownLoadUtils {
37 37
     /**
38 38
      * 下载文件
39 39
      */
40
-    fun addDownload(url: String, tag: String, savepath: String) {
40
+    fun addDownload(url: String, tag: String, savepath: String,pkgName: String) {
41 41
         var isHave = false
42 42
         for (element in queue) {
43 43
             if (element.tag === tag) {
@@ -45,10 +45,10 @@ object DownLoadUtils {
45 45
             }
46 46
         }
47 47
         if (!isHave) {
48
-            queue.add(DownloadItem(url, tag, savepath, 0))
48
+            queue.add(DownloadItem(url, tag, savepath, 0,pkgName))
49 49
         } else {
50 50
             for (downloadCallback in callbackList) {
51
-                downloadCallback.onFailure(DownloadItem(url, tag, savepath, 0), "已经在下载队列")
51
+                downloadCallback.onFailure(DownloadItem(url, tag, savepath, 0,pkgName), "已经在下载队列")
52 52
             }
53 53
         }
54 54
         downloadAction()
@@ -73,14 +73,14 @@ object DownLoadUtils {
73 73
                         val call = downloader.newCall(request)
74 74
                         call.execute(object : Download.Callback {
75 75
                             override fun onStart(call: Download.Call) {
76
-                                LogShow("开始下载")
76
+                                LogShow("开始下载"+downItem.savepath)
77 77
                                 for (downloadCallback in callbackList) {
78 78
                                     downloadCallback.onStart(downItem)
79 79
                                 }
80 80
                             }
81 81
 
82 82
                             override fun onSuccess(call: Download.Call, response: Download.Response) {
83
-                                LogShow("下载成功")
83
+                                LogShow("下载成功"+downItem.savepath)
84 84
                                 queue.poll()
85 85
                                 for (downloadCallback in callbackList) {
86 86
                                     downloadCallback.onSuccess(downItem)
@@ -97,7 +97,7 @@ object DownLoadUtils {
97 97
 
98 98
                             override fun onLoading(call: Download.Call, current: Long, total: Long) {
99 99
                                 val progress = (current * 100 / total).toInt()
100
-                                LogShow("下载进度"+progress)
100
+                               // LogShow("下载进度"+progress)
101 101
 //                                Log.i("详情", "$progress ${downItem.progress} ${callbackList.size}")
102 102
                                 if (progress != downItem.progress) {
103 103
                                     for (downloadCallback in callbackList) {
@@ -122,7 +122,7 @@ object DownLoadUtils {
122 122
     }
123 123
 }
124 124
 
125
-data class DownloadItem(val url: String, val tag: String, val savepath: String, var progress: Int)
125
+data class DownloadItem(val url: String, val tag: String, val savepath: String, var progress: Int,var pkgName:String)
126 126
 
127 127
 interface DownloadCallback {
128 128
     fun onStart(downItem: DownloadItem)

+ 83
- 0
app/src/main/java/com/xhly/manageapp/utils/InstallUtils.kt Zobrazit soubor

@@ -0,0 +1,83 @@
1
+package com.xhly.manageapp.utils
2
+
3
+import android.app.Activity
4
+import com.xhly.corelib.utils.LogShow
5
+import com.xhly.manageapp.ManageApplication
6
+import kotlinx.coroutines.CoroutineScope
7
+import kotlinx.coroutines.Dispatchers
8
+import kotlinx.coroutines.cancel
9
+import kotlinx.coroutines.delay
10
+import kotlinx.coroutines.launch
11
+import java.util.LinkedList
12
+import java.util.Queue
13
+
14
+object InstallUtils {
15
+    var isRunning: Boolean = false
16
+    var isInstalling: Boolean = false
17
+    val queue: Queue<InstallItem> = LinkedList()
18
+    var coroutineScope:CoroutineScope? = null
19
+    fun installSuccess(packageName: String) {
20
+        LogShow("执行任务"+packageName)
21
+        if (queue.size > 0) {
22
+            LogShow("111执行任务"+packageName)
23
+            val installItem = queue.peek()
24
+            if (installItem != null) {
25
+                LogShow("222执行任务"+packageName)
26
+                if(packageName == installItem.packageName){
27
+                    LogShow("333执行任务"+packageName)
28
+                    queue.poll()
29
+                    isInstalling = false
30
+                }
31
+            }
32
+        }
33
+    }
34
+
35
+    fun addInstall(savepath: String, packageName: String) {
36
+        var isHave = false
37
+        for (element in queue) {
38
+            if (element.packageName === packageName) {
39
+                isHave = true
40
+            }
41
+        }
42
+        if (!isHave) {
43
+            queue.add(InstallItem( savepath, packageName))
44
+        }
45
+        installAction()
46
+    }
47
+
48
+    private fun installAction() {
49
+        LogShow("开始安装"+ isRunning)
50
+        if (isRunning) {
51
+            return
52
+        }
53
+        /*if (coroutineScope==null){
54
+            coroutineScope=CoroutineScope(Dispatchers.IO)
55
+        }*/
56
+        coroutineScope=CoroutineScope(Dispatchers.IO)
57
+        coroutineScope?.launch {
58
+            while (queue.size > 0) {
59
+                isRunning = true
60
+                val installItem = queue.peek()
61
+                installItem?.let {
62
+                    isInstalling = true
63
+                    //installApp(installItem.activity, installItem.savepath, installItem.packageName)
64
+                    ManageApplication.installPackage(installItem.savepath)
65
+                    while (isInstalling) {
66
+                        delay(1000)
67
+                    }
68
+                }
69
+            }
70
+            isRunning = false
71
+        }
72
+
73
+    }
74
+
75
+    public fun destroyInstallUtils(){
76
+        queue.clear()
77
+        isRunning= false
78
+        isInstalling = false
79
+        coroutineScope?.cancel()
80
+    }
81
+}
82
+
83
+data class InstallItem(val savepath: String, val packageName: String)

binární
app/src/main/res/drawable/icon_netset.png Zobrazit soubor


+ 1
- 1
app/src/main/res/layout/activity_main.xml Zobrazit soubor

@@ -22,7 +22,7 @@
22 22
                 android:layout_width="100dp"
23 23
                 android:layout_height="100dp"
24 24
                 android:text="管理页面"
25
-                android:visibility="gone" />
25
+                android:visibility="visible" />
26 26
 
27 27
 
28 28
             <LinearLayout

Načítá se…
Zrušit
Uložit