Browse Source

1.修改下载和安装方法

20241218TB223FC(测试jar包)
wangwanlei 10 months ago
parent
commit
e4127a4f8c

+ 2
- 1
app/src/main/java/com/xhly/manageapp/ManageApplication.kt View File

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

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

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

+ 2
- 2
app/src/main/java/com/xhly/manageapp/ui/ManageActivity.kt View File

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

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

73
 import com.xhly.manageapp.utils.AppDownLoadUtils
73
 import com.xhly.manageapp.utils.AppDownLoadUtils
74
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
74
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
75
 import com.xhly.manageapp.utils.CustomAppUtils
75
 import com.xhly.manageapp.utils.CustomAppUtils
76
+import com.xhly.manageapp.utils.InstallUtils
76
 import com.xhly.manageapp.utils.PadInfoUtils
77
 import com.xhly.manageapp.utils.PadInfoUtils
77
 import com.xhly.manageapp.utils.StrategyUtils
78
 import com.xhly.manageapp.utils.StrategyUtils
78
 import com.xhly.manageapp.workmanager.TimingWorker
79
 import com.xhly.manageapp.workmanager.TimingWorker
196
                             FileUtils.deleteCurrentFlie(it)
197
                             FileUtils.deleteCurrentFlie(it)
197
                         }
198
                         }
198
                         val file = getExternalFilesDir(null)
199
                         val file = getExternalFilesDir(null)
199
-                        viewModel.viewModelScope.launch {
200
+                    /*    viewModel.viewModelScope.launch {
200
                             modelList.forEach { app ->
201
                             modelList.forEach { app ->
201
                                 try {
202
                                 try {
202
                                     //获得已安装的应用判断版本,未安装的则直接静默安装。
203
                                     //获得已安装的应用判断版本,未安装的则直接静默安装。
209
                                         val currentApp = filter[0]
210
                                         val currentApp = filter[0]
210
                                         if (app.versionNum > currentApp.versionNum) {
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
                                     } else {
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
                                 } catch (e: Exception) {
221
                                 } catch (e: Exception) {
221
                                     LogShow("问题" + e.toString())
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
                     } else {
250
                     } else {
226
                         // 用户拒绝了安装权限,处理相应逻辑
251
                         // 用户拒绝了安装权限,处理相应逻辑
1203
 
1228
 
1204
     override fun onSuccess(downItem: DownloadItem) {
1229
     override fun onSuccess(downItem: DownloadItem) {
1205
         LogShow("开始安装")
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
     override fun onFailure(downItem: DownloadItem, errMsg: String) {
1237
     override fun onFailure(downItem: DownloadItem, errMsg: String) {

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

13
 import java.util.LinkedList
13
 import java.util.LinkedList
14
 
14
 
15
 object AppDownLoadUtils {
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
     private var isDownloading = false
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
         if (!isDownloading) {
21
         if (!isDownloading) {
24
             startNextDownload()
22
             startNextDownload()
25
         }
23
         }
27
 
25
 
28
     private suspend fun startNextDownload() {
26
     private suspend fun startNextDownload() {
29
         if (downloadQueue.isNotEmpty()) {
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
         } else {
30
         } else {
33
             isDownloading = false
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
         withContext(Dispatchers.IO) {
36
         withContext(Dispatchers.IO) {
39
             try {
37
             try {
40
                 //val file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
38
                 //val file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
55
                         LogShow("下载结果" + successful)
53
                         LogShow("下载结果" + successful)
56
                         if (successful) {
54
                         if (successful) {
57
                            /* UIEvent(Const.INSTALL_FORCEAPP).setMessage(File(name, "$appName.apk").toString()).post()*/
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
                         } else {
58
                         } else {
60
                             currentRetry++
59
                             currentRetry++
61
                         }
60
                         }
62
-                        delay(1000*20)
63
                         LogShow("下载后,开始安装")
61
                         LogShow("下载后,开始安装")
64
                     }
62
                     }
65
                 }
63
                 }

+ 1
- 1
app/src/main/java/com/xhly/manageapp/utils/CustomAppUtils.kt View File

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

+ 7
- 7
app/src/main/java/com/xhly/manageapp/utils/DownLoadUtils.kt View File

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
         var isHave = false
41
         var isHave = false
42
         for (element in queue) {
42
         for (element in queue) {
43
             if (element.tag === tag) {
43
             if (element.tag === tag) {
45
             }
45
             }
46
         }
46
         }
47
         if (!isHave) {
47
         if (!isHave) {
48
-            queue.add(DownloadItem(url, tag, savepath, 0))
48
+            queue.add(DownloadItem(url, tag, savepath, 0,pkgName))
49
         } else {
49
         } else {
50
             for (downloadCallback in callbackList) {
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
         downloadAction()
54
         downloadAction()
73
                         val call = downloader.newCall(request)
73
                         val call = downloader.newCall(request)
74
                         call.execute(object : Download.Callback {
74
                         call.execute(object : Download.Callback {
75
                             override fun onStart(call: Download.Call) {
75
                             override fun onStart(call: Download.Call) {
76
-                                LogShow("开始下载")
76
+                                LogShow("开始下载"+downItem.savepath)
77
                                 for (downloadCallback in callbackList) {
77
                                 for (downloadCallback in callbackList) {
78
                                     downloadCallback.onStart(downItem)
78
                                     downloadCallback.onStart(downItem)
79
                                 }
79
                                 }
80
                             }
80
                             }
81
 
81
 
82
                             override fun onSuccess(call: Download.Call, response: Download.Response) {
82
                             override fun onSuccess(call: Download.Call, response: Download.Response) {
83
-                                LogShow("下载成功")
83
+                                LogShow("下载成功"+downItem.savepath)
84
                                 queue.poll()
84
                                 queue.poll()
85
                                 for (downloadCallback in callbackList) {
85
                                 for (downloadCallback in callbackList) {
86
                                     downloadCallback.onSuccess(downItem)
86
                                     downloadCallback.onSuccess(downItem)
97
 
97
 
98
                             override fun onLoading(call: Download.Call, current: Long, total: Long) {
98
                             override fun onLoading(call: Download.Call, current: Long, total: Long) {
99
                                 val progress = (current * 100 / total).toInt()
99
                                 val progress = (current * 100 / total).toInt()
100
-                                LogShow("下载进度"+progress)
100
+                               // LogShow("下载进度"+progress)
101
 //                                Log.i("详情", "$progress ${downItem.progress} ${callbackList.size}")
101
 //                                Log.i("详情", "$progress ${downItem.progress} ${callbackList.size}")
102
                                 if (progress != downItem.progress) {
102
                                 if (progress != downItem.progress) {
103
                                     for (downloadCallback in callbackList) {
103
                                     for (downloadCallback in callbackList) {
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
 interface DownloadCallback {
127
 interface DownloadCallback {
128
     fun onStart(downItem: DownloadItem)
128
     fun onStart(downItem: DownloadItem)

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

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
app/src/main/res/drawable/icon_netset.png View File


+ 1
- 1
app/src/main/res/layout/activity_main.xml View File

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

Loading…
Cancel
Save