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;
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;
//是否有接听
- private boolean isActive = false;
+ private boolean hasRemoteAnswer = false;
//通话结束
public static final int STATE_END = 9;
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("正在呼叫");
* 根据条件进行下一轮拨号
*/
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("结束界面...");
+ }
}
*/
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();
* 根据策略去拨号
*/
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("-----------------------------------------------");
//策略因素有:
//轮询组的次数(判断在此次通话结束以后)
//拨号策略(判断在此次通话结束以后,不管是挂断还是超时)