2

   私は 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;
        }
    }
};
4

1 に答える 1

2

すでに解決策を見つけていることを願っています。そうでない場合は、次のことを試してください。

メソッドでを使用してMediaPlayeronRingBack()独自のサウンドを再生します。MediaPlayerコールが確立されたら、必ず を停止してください。この例では、リソースに配置された MP3 ファイルを使用しましたraw

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

};
于 2012-11-08T16:01:27.143 に答える