From 786e1553edd9093ae8a397ff87877f8755c59e2f Mon Sep 17 00:00:00 2001 From: TrillGates Date: Thu, 21 Oct 2021 21:02:22 +0800 Subject: [PATCH] =?utf8?q?=E5=A4=84=E7=90=86=E4=BA=86=E8=BD=AE=E6=8B=A8?= =?utf8?q?=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ic/sos/SOSPresenter.java | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/ic/sos/SOSPresenter.java b/app/src/main/java/com/ic/sos/SOSPresenter.java index 525bad7..41e0550 100644 --- a/app/src/main/java/com/ic/sos/SOSPresenter.java +++ b/app/src/main/java/com/ic/sos/SOSPresenter.java @@ -7,18 +7,13 @@ import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.net.Uri; -import android.net.wifi.aware.IdentityChangedListener; -import android.nfc.cardemulation.HostApduService; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.telephony.PhoneNumberUtils; -import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; -import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.android.internal.telephony.ITelephony; @@ -27,8 +22,6 @@ import com.ic.iclooger.ICLogger; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import static android.telephony.TelephonyManager.CALL_STATE_IDLE; @@ -70,7 +63,7 @@ public class SOSPresenter { //是否有接听 - private boolean isActive = false; + private boolean hasRemoteAnswer = false; //通话结束 public static final int STATE_END = 9; @@ -96,12 +89,14 @@ public class SOSPresenter { switch (state) { case STATE_END: ICLogger.d("通话结束"); + checkNextCall(); break; case STATE_HAND_UP_ING: ICLogger.d("正在挂断"); break; case STATE_TALKING: ICLogger.d("正在通话中..."); + hasRemoteAnswer = true; break; case STATE_CALLING: ICLogger.d("正在呼叫"); @@ -118,7 +113,40 @@ public class SOSPresenter { * 根据条件进行下一轮拨号 */ private void checkNextCall() { - + boolean doCallNext; + //是否进行下一个拨号,结合策略和是否有接听 + + //已经接听了 + //stop,continue,loop + if ("continue".equals(callWay)) { + //播完此轮就好 + doCallNext = currentCallIndex != phoneNumList.size() - 1; + } else if ("loop".equals(callWay)) { + //连续拨打完目标轮询组的次数 + doCallNext = currentLoopGroupTime != loopTime; + } else { + //stop的case已经接听了,就不再往下拨号了 + doCallNext = !hasRemoteAnswer; + } + //当前组是否有循环完毕,如果循环完毕,把下标移到第0个位置 + if (currentCallIndex == phoneNumList.size() - 1) { + currentCallIndex = -1; + } + ICLogger.d("doCallNext ==> " + doCallNext); + //计数叠加 + currentCallIndex++; + ICLogger.d("************************************************"); + ICLogger.d("|currentCallIndex ==> " + currentCallIndex); + ICLogger.d("|currentLoopGroupTime ==> " + currentLoopGroupTime); + ICLogger.d("|loopTime ==> " + loopTime); + ICLogger.d("|hasRemoteAnswer ==> " + hasRemoteAnswer); + ICLogger.d("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); + //组的叠加会在拨号位置到了列表尾部时增加 + if (doCallNext) { + handler.postDelayed(this::doSosCall, 10000); + } else { + ICLogger.d("结束界面..."); + } } @@ -127,9 +155,11 @@ public class SOSPresenter { */ private void sosTask() { boolean hasSim = this.checkHasSim(); + ICLogger.d("hasSim ==> " + hasSim); if (hasSim) { listSosContacts(); } + ICLogger.d("phoneNumList.size() ==> " + phoneNumList.size()); if (phoneNumList.size() > 0) { //可以拨号 doSosCall(); @@ -191,6 +221,12 @@ public class SOSPresenter { * 根据策略去拨号 */ private void doSosCall() { + ICLogger.d("==========================================="); + ICLogger.d("currentCallIndex ==> " + currentCallIndex); + ICLogger.d("phoneNumList.size() ==> " + phoneNumList.size()); + ICLogger.d("callDuration ==> " + callDuration); + ICLogger.d("currentLoopGroupTime ==> " + currentLoopGroupTime); + ICLogger.d("-----------------------------------------------"); //策略因素有: //轮询组的次数(判断在此次通话结束以后) //拨号策略(判断在此次通话结束以后,不管是挂断还是超时) -- 2.17.1