Входящие и исходящие звонки в BroadcastReceiver

Существует услуга, в которой обработанный медиаплеер захочет сделать это для того, чтобы служба входящего и исходящего вызова остановила медиаплеер, и в конце потока вызовов возобновляет воспроизведение. Теперь удалось только остановить воспроизведение на входящих и исходящих вызовах, следует добавить код для воспроизведения TelephonyManager.CALL_STATE_IDLE: тогда разговор через некоторое время начинается музыка, как это исправить?

public class CallReceiver extends BroadcastReceiver{
TelephonyManager telManager;
Context context;
boolean startedCall = false;

@Override
public void onReceive(Context context, Intent intent) {


this.context=context;


telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

}

private final PhoneStateListener phoneListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
    super.onCallStateChanged(state, incomingNumber);
    try {
        switch (state) {
        case TelephonyManager.CALL_STATE_RINGING: {
            if(incomingNumber!=null)
            {
                //incoming call
                MediaService.stopMP();
                startedCall  = true;
            }

        break;
        }
        case TelephonyManager.CALL_STATE_OFFHOOK: {
            if(incomingNumber!=null)
            {
                //outgoing call
                MediaService.stopMP();
                startedCall  = true;
            }

        break;
        }
        case TelephonyManager.CALL_STATE_IDLE: {
            if(startedCall)
            {
                MainActivity.titleMusic.setVisibility(View.VISIBLE);
                MainActivity.Play();
                MediaService.startMP();
                startedCall = false;
            }                   

        break;
        }
        default: { }
        }
        } catch (Exception ex) {

        }
    }
};
}

1 ответ

Решение

Всякий раз, когда перед вызовом состояние вызова должно быть TelephonyManager.CALL_STATE_IDLEДо получения входящего вызова состояние вызова должно быть IDEL, поэтому необходимо установить флаг логического типа для идентификации состояния;

    public class CallReceiver extends BroadcastReceiver{
    TelephonyManager telManager;
    Context context;

    @Override
    public void onReceive(Context context, Intent intent) {    
       this.context=context;    
       private boolean startedCall = false; // New added boolean    
       telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
       telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);    
    }

    private final PhoneStateListener phoneListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
    super.onCallStateChanged(state, incomingNumber);
    try {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING: {
                if(incomingNumber!=null) {
                   //incoming call
                   MainActivity.stopMP()
                }    
                break;
            }
            case TelephonyManager.CALL_STATE_OFFHOOK: {    
                startedCall  = true; // Newly added code    
               if(incomingNumber!=null) {
                  //outgoing call
                   MainActivity.stopMP();
               }
               break;
            }
            case TelephonyManager.CALL_STATE_IDLE: {
               if(startedCall) {
                   MainActivity.titleMusic.setVisibility(View.VISIBLE);
                   MainActivity.Play();
                   MediaService.startMP();
               }          
               break;
            }
            default: { }
        }
      } catch (Exception ex) {

      }
    }
    };
}
Другие вопросы по тегам