2013-08-09 3 views
0

Я использую этот код для прослушивания состояния телефона. при поступлении вызова он приостанавливает воспроизведение медиаплеера, но как только я забираю вызов, он снова начинает воспроизведение с прослушивания динамика (а не от звонка). и я также попытался с удалением mediaPlayer.start() от case TelephonyManager.CALL_STATE_IDLE:, в этом случае он отлично работает, но он не запускается (возобновляется) снова. Есть ли какой-либо флаг для этого?Media Player проигрывает после получения вызова?

private final PhoneStateListener phoneListener = new PhoneStateListener() { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
    try { 
     switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      Toast.makeText(context, "Call is Coming",Toast.LENGTH_SHORT).show(); 
      mediaPlayer.pause(); 
     break; 

     case TelephonyManager.CALL_STATE_OFFHOOK: 

     break; 

     case TelephonyManager.CALL_STATE_IDLE: 
      mediaPlayer.start(); 

     break; 

     default: 
     } 
     } catch (Exception ex) { 
      mediaPlayer.release(); 
     } 
    } 
}; 

}

или Есть ли другой способ сделать это?

+0

Я не слишком хорошо знакомы с Telephonymanager, но я хотел бы предложить вам использовать Soundpool вместо MediaPlayer для пути повышения производительности. –

+0

Я бы поместил что-то в случай по умолчанию, чтобы посмотреть, обрабатываете ли вы все случаи –

+0

, этот вопрос похож на этот http://stackoverflow.com/questions/5610464/stopping-starting-music-on-incoming-calls – artsylar

ответ

1

Попробуйте это:

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); 
}