Android SIP API - 在SipAudioCall.Listener.onRingingBack()之后,如何听到任何等待的声音

时间:2012-07-14 04:29:37

标签: android api sip

我正在使用Android 2.3+ API开发SIP客户端应用程序,我可以使用SipDemo示例代码拨打电话并成功接收来电。但是在同伴接听电话之前我听不到任何声音。
众所周知,当我们拨打普通的GSM电话时,我们可以在你打电话的人接听电话之前听到“DO..DO ... DO”。
现在让我向您展示我的SipAudioCall.Listener代码。我知道当对等方收到邀请时调用了SipAudioCall.Listener.onRingingBack,并且当对等方应答时调用了SipAudioCall.Listener.onCallEstablished。 我不知道在SipAudioCall.ListeneronRingingBack方法中该怎么做才能听到任何声音。当我打电话时,我的一方保持沉默,直到同伴接听我的电话......(抱歉我的英语不好)

提前致谢!

private final SipAudioCall.Listener sipAudioCallListener = new SipAudioCall.Listener(){

    @Override
    public void onRinging(SipAudioCall call, SipProfile caller) {
        Log.e(TAG, "onRinging caller="+caller.getUriString()+"; call="+call.getState()+"; caller="+caller.getUriString());
        super.onRinging(call, caller);
    }

    @Override
    public void onRingingBack(SipAudioCall call) {
        Log.e(TAG, "onRingingBack: call="+call.getState());
        super.onRingingBack(call);
    }

    @Override
    public void onCallEstablished(SipAudioCall call) {
        Log.e(TAG, "onCallEstablished: call="+call.getState());
        super.onCallEstablished(call);
    }

    @Override
    public void onCallEnded(SipAudioCall call) {
        Log.e(TAG, "onCallEnded: call="+call.getState());
        super.onCallEnded(call);
    }

    @Override
    public void onCallBusy(SipAudioCall call) {
        Log.e(TAG, "onCallBusy: call="+call.getState());
        super.onCallBusy(call);
    }

    @Override
    public void onCallHeld(SipAudioCall call) {
        Log.e(TAG, "onCallHeld: call="+call.getState());
        super.onCallHeld(call);
    }

    @Override
    public void onError(SipAudioCall call, final int errorCode, final String errorMessage) {
        Log.e(TAG, "###onError errorCode="+errorCode+"; errorMessage="+errorMessage);
        super.onError(call, errorCode, errorMessage);
    }

    @Override
    public void onChanged(final SipAudioCall call) {
        Log.e(TAG, "onChanged: call="+call.getState());
        super.onChanged(call);
    switch(call.getState()){
        case SipSession.State.OUTGOING_CALL:
        //making an outgoing call 
            break;
        case SipSession.State.OUTGOING_CALL_RING_BACK: 
        //peer receives ringing event, what can I do to hear any thing until peer answers the call??
        //...
            break;
        case SipSession.State.IN_CALL:
        //call established, it works fine.
            call.startAudio();
            call.setSpeakerMode(false);
            if(call.isMuted()){
                call.toggleMute();
            }
            break;
        case SipSession.State.READY_TO_CALL:
            break;
        }
    }
};

1 个答案:

答案 0 :(得分:2)

我希望你已经找到了解决方案。如果没有尝试以下内容:

使用MediaPlayer方法中的onRingBack()播放您自己的声音。确保在建立呼叫后停止MediaPlayer。在这个例子中,我使用了放在raw资源中的MP3文件。

SipAudioCall.Listener listener = new SipAudioCall.Listener() {

    @Override
    public void onCallEstablished(SipAudioCall call) {  
        mPlayer.stop();
        call.startAudio();
    }

    @Override
    public void onRingingBack (SipAudioCall call){
        MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.phone_calling); 
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setLooping(true);
        mPlayer.start();
    }

};