diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index e44bc1ad247aa0bc1748b61bcd4cd71674f1d04a..624147f806a1b13b857e1474c0304ede2ad4f294 100644 --- a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt +++ b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt @@ -65,22 +65,39 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { startRobotService() startBtn.setOnClickListener{ - startRobot() - } - - stopBtn.setOnClickListener{ - stopRobot() + toggle() } startBtn.requestFocus() requestAppList() refreshBtn.setOnClickListener{ + this.appInfoAdapter.clear() requestAppList() } } + private fun toggle() { + // 暂时测试用 + if (TaskManager.instance.isRunning) { + stopRobot() + startBtn.isEnabled = false + startBtn.postDelayed({ + startBtn.isEnabled = true + startBtn.text = "启动" + }, 3000) + } + else { + startRobot() + startBtn.isEnabled = false + startBtn.postDelayed({ + startBtn.isEnabled = true + startBtn.text = "停止" + }, 3000) + } + } + private fun requestAppList() { apkInfoProtocol = GetAppInfoProtocol(this, Config.instance) this.dataHandler = AppBaseHandler(this) @@ -139,7 +156,7 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { override fun onProtocolSucceed(protocol: IProtocol?) { if (protocol is GetAppInfoProtocol) { - this.appInfoData = protocol.data + this.appInfoData = protocol.data as AppInfoData this.appInfoAdapter.setData(appInfoData.apkInfos) this.appInfoAdapter.notifyDataSetChanged() @@ -179,6 +196,11 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { this.dataList.addAll(dataList) } + fun clear() { + this.dataList.clear() + notifyDataSetChanged() + } + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var itemView: AppConfigListItem if (convertView == null) { diff --git a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt index c17a661c74c41f541cc1a862bf673ecded683b78..0051aabfcf884539a4a465c8a230adeef29fd670 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -97,7 +97,12 @@ class Task : IAppBaseCallback { // } // 频道轮询处理 try { - this.processChannels() + val success = this.processChannels() + // 尝试两次 + if (!success) { + this.reset() + this.processChannels() + } // 上传图片 this.uploadImage() this.status = "4" @@ -162,7 +167,7 @@ class Task : IAppBaseCallback { } } - private fun processChannels() { + private fun processChannels(): Boolean { Log.i(TAG, "processChannels") step() for (i in 1 until this.apkInfo.channelCount) { @@ -170,8 +175,15 @@ class Task : IAppBaseCallback { this.channelIndex = i capture(apkInfo.captureDelay) AdbUtil.sendMultiKey(this.apkInfo.channelKeyEvent) + + if (!AppUtil.isAppBackground(context, this.apkInfo.packageName)) { + return false + } + step() } + + return true } private fun step() { diff --git a/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt b/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt index e45d0e1c4970020747a75bb68efeb944c9033562..5ba5c826b5c950b8b4b9231fdaac6de1da56bbd4 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt @@ -205,7 +205,7 @@ object AdbUtil { val keyEvents = ArrayList() val keys = keyPath.split(Constants.SLASH) for (stepKey in keys) { - var delay = "1" + var delay = "2" if (Constants.VERTICAL_BAR in stepKey) { val params = stepKey.split(Constants.VERTICAL_BAR) delay = params[1] diff --git a/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt b/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt index 9e6d28a8dae4a9121dac62c7e37a23857b607759..59c28d91cbfc0a52dbfa468e6afa25081a51f6d1 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt @@ -1,5 +1,6 @@ package com.duolebo.blyrobot.util +import android.app.ActivityManager import android.content.Context import android.text.TextUtils import java.net.Inet4Address @@ -12,6 +13,9 @@ import android.content.pm.PackageManager import android.os.Build import android.os.Environment import java.util.regex.Pattern +import android.app.ActivityManager.RunningAppProcessInfo + + object AppUtil { @@ -168,4 +172,20 @@ object AppUtil { return sdcardAbsPath } + + fun isAppBackground(context: Context, packageName: String): Boolean { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + return AdbUtil.isAppActive(packageName) + } + + val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + val appProcesses = activityManager.runningAppProcesses + for (appProcess in appProcesses) { + if (appProcess.processName == packageName) { + return appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND + } + } + return false + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a5fb5244d567de09eecc68fdebaafd371d5c1498..35f10793fcb29b54024fd3305e452f7eb367446b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -27,13 +27,6 @@ android:layout_height="wrap_content" android:text="启动"/> -