У меня есть приложение для выполнения некоторых задач после завершения входящего вызова. У меня есть прослушиватель состояния телефона с двумя флагами, позволяющий обнаруживать только поступившие звонки и сохранять телефонный номер в переменной stati c, которую можно использовать, когда вызов заканчивается одним флагом, когда телефон Звонит, чтобы определить только доход, и другой флаг, когда ответы на вызовы делают вещи только для отвеченных
все работает правильно, но я обнаружил, что если во время вызова поступает другой входящий, то мое приложение выполняет вещи для второго дохода, даже если отклонить его
вот мой код
public class ServiceReceiver extends BroadcastReceiver {
static boolean is_incoming = false;
static boolean in_call = false; //when incoming call ends check that call was answered
public static String saved_number; //when call answers store number to use when ends
static Context context;
@Override
public void onReceive(Context context, Intent intent) {
ServiceReceiver.context = context;
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){ //when phone rings
is_incoming = true;
Toast.makeText(context, "ringing", Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){ //when incoming call answer
in_call = true;
saved_number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Toast.makeText(context, "offhook", Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){ // when reject or miss or ends
if(in_call && is_incoming) { //answered incoming call ends
doStuff(saved_number);
}
//making flags ready for next use
in_call = false;
is_incoming = false;
}
}
}
Я обнаружил, что при поступлении второго входящего вызова отправляется широковещательная рассылка с состоянием звонка по второму номеру телефона, но при отклонении кажется, что android отправляет широковещательную рассылку со вторым число!
моя собственная идея заключается в том, чтобы внутри состояния offhook, если in_call уже true, ничего не делать (не изменять сохраненный номер), поэтому я изменил выражение offhook на это
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){ //when incoming call answer
if(in_call){
Toast.makeText(context, "inside checking", Toast.LENGTH_SHORT).show();
//return;
}
saved_number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
//Toast.makeText(context, "offhook for " + saved_number, Toast.LENGTH_SHORT).show();
in_call = true;
}
, но Я обнаружил, что тост «внутри проверки» показывает каждый раз, и я использовал !in_call
вместо in_call
и волшебным образом изменилось, и если uncomment return приложение вылетает
, теперь я так растерялся, почему !!!
, пожалуйста, помогите