Есть несколько вещей, которые вы можете сделать:
Прежде всего, вы можете прослушивать изменения в состоянии вызова, используя PhoneStateListener
.Вы можете зарегистрировать слушателя в TelephonyManager:
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
//Incoming call: Pause music
} else if(state == TelephonyManager.CALL_STATE_IDLE) {
//Not in call: Play music
} else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
//A call is dialing, active or on hold
}
super.onCallStateChanged(state, incomingNumber);
}
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null) {
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
Не забудьте отменить регистрацию слушателя, когда он больше не нужен, используя PhoneStateListener.LISTEN_NONE
:
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null) {
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
}
Для получения дополнительной информации читайтедокументация .
Еще одна вещь, которую вы можете сделать - прослушивание трансляции android.intent.action.PHONE_STATE
.Он будет содержать дополнительный TelephonyManager.EXTRA_STATE
, который даст вам информацию о звонке. Посмотрите документацию здесь .
Обратите внимание, что вам потребуется разрешение android.permission.READ_PHONE_STATE
в обоих случаях.