From 0dbc9c45a7726b32d2d93333d02ba2a40219fed4 Mon Sep 17 00:00:00 2001 From: liuyang Date: Wed, 24 Oct 2018 17:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A8=8B=E5=BA=8F=E5=89=8D?= =?UTF-8?q?=E5=8F=B0=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=90=AF=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/duolebo/blyrobot/MainActivity.kt | 34 +++++++++++++++---- .../java/com/duolebo/blyrobot/data/Task.kt | 16 +++++++-- .../java/com/duolebo/blyrobot/util/AdbUtil.kt | 2 +- .../java/com/duolebo/blyrobot/util/AppUtil.kt | 20 +++++++++++ app/src/main/res/layout/activity_main.xml | 7 ---- 5 files changed, 63 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index e44bc1a..624147f 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 c17a661..0051aab 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 e45d0e1..5ba5c82 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 9e6d28a..59c28d9 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 a5fb524..35f1079 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="启动"/> -