Захватывать входящий вызов. Android

У меня есть мое приложение, которое использует класс MediaPlayer, мне нужно, чтобы, когда между вызовом звук останется в mute, но когда app переходит во второй план (когда нажимают на кнопку home например) осталось воспроизведение аудио.

   public static class ReceptorLlamadas extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
       call(context);
   }

   private void call(Context context) {
       PhoneCallListener phoneListener = new PhoneCallListener();
       TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
       telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
   }

   private class PhoneCallListener extends PhoneStateListener {
       public boolean isPhoneCalling = false;
       Boolean wasRinging = false;

       @Override
       public void onCallStateChanged(int state, String incomingNumber) {
           if (TelephonyManager.CALL_STATE_RINGING == state) {
               // phone ringing
              //Aquí ya detectas que el teléfono esta recibiendo una llamada entrante

           }
           if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
               // active
               isPhoneCalling = true;
               if (mPlayer != null && mPlayer.isPlaying()) {
                   mPlayer.setVolume(0,0);
               }
           }

           if (TelephonyManager.CALL_STATE_IDLE == state) {

               isPhoneCalling = false;
           }

       }
   }

и я это добавил в manifest.xml

<receiver android:name=".MainActivity$ReceptorLlamadas">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
 </receiver>
4
задан 19.05.2017, 23:07
1 ответ

С TelephonyManager ты можешь подбирать различные состояния telГ©fono:

 public class prueba extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    call(context);
}

private void call(Context context) {
    PhoneCallListener phoneListener = new PhoneCallListener();
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}

private class PhoneCallListener extends PhoneStateListener {
    public boolean isPhoneCalling = false;
    Boolean wasRinging = false;

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (TelephonyManager.CALL_STATE_RINGING == state) {
            // phone ringing
            //Aquí ya detectas que el teléfono esta recibiendo una llamada entrante
        }

        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // active
            isPhoneCalling = true;
        }

        if (TelephonyManager.CALL_STATE_IDLE == state) {

            isPhoneCalling = false;
        }

    }
}

}

2
ответ дан 24.11.2019, 13:49
  • 1
    большое спасибо, но я qued и # 243; сомнение, где я звоню в call ()? – Rodrigo 30.07.2016, 00:41
  • 2
    С onReceive, которые это, где ты хочешь сделать comprobaci и # 243; n состояния – Fen Dev 30.07.2016, 01:41
  • 3
    Большое спасибо из-за твоего ответа, но меня фигурирует ошибка: не zero argument строитель. – Rodrigo 03.08.2016, 01:06
  • 4
    Modifiqu и # 233; вопрос добавляя я ново c и # 243; я говорю. – Rodrigo 03.08.2016, 01:12
  • 5
    доказательство помещая c и # 243; я говорю call () внутри onReceive вместо того, чтобы называть funci и # 243; n, помести c и # 243; я говорю, что он дает тебе, чтобы это видеть. – Fen Dev 03.08.2016, 13:30