如何使用android.net.sip API从传出呼叫中获取呼叫Id

如何使用android.net.sip API从传出呼叫中获取呼叫Id,android,sip,Android,Sip,我想知道当您使用android.net.sipAPI拨打外线电话时,如何获取呼叫id。 我现在正在打一个电话,就像他们在android sip演示中做的那样。 call=manager.makeAudioCall(me.getUriString(),sipAddress,listener,30) 我还在文档中看到,您可以在拨打电话时创建sip会话以获取呼叫id,但我就是搞不懂。有关SipManager的文档,请参阅。在进行音频通话之前,我也会这样做: manager.createSipSessi

我想知道当您使用
android.net.sip
API拨打外线电话时,如何获取呼叫id。 我现在正在打一个电话,就像他们在android sip演示中做的那样。
call=manager.makeAudioCall(me.getUriString(),sipAddress,listener,30)
我还在文档中看到,您可以在拨打电话时创建sip会话以获取呼叫id,但我就是搞不懂。有关
SipManager
的文档,请参阅。在进行音频通话之前,我也会这样做:

manager.createSipSession(me, new SipSession.Listener(){
        @Override
        public void onCalling(SipSession session) {
            String callId = session.getCallId();
            Log.d(TAG, "onCalling. call ID: " + callId);
        }
        @Override
        public void onRingingBack(SipSession session) {
            String callId = session.getCallId();
            Log.d(TAG, "onRinging. call ID!!!: " + callId);
        }
        @Override
        public void onCallEstablished(SipSession session,
                String sessionDescription) {
            String callId = session.getCallId();
            Log.d(TAG, "onCallEstablished: call ID!!!: " + callId);

        }

    });

但是,当我拨出电话时,没有一个方法被调用。

我终于找到了问题的解决方案,现在是:

private SipAudioCall myMakeAudioCall(Context context, SipProfile sipProfile, SipProfile peerProfile, int timeout) throws SipException{

    SipAudioCall.Listener l = new SipAudioCall.Listener(){
        @Override
        public void onCallEstablished(SipAudioCall call) {
        }
        //add more methods if you want to
    };

    SipAudioCall testCall = new SipAudioCall(context,sipProfile);
    testCall.setListener(l);

    SipSession.Listener sessionListener = new SipSession.Listener(){
        @Override
        public void onCalling(SipSession session) {
            String callId = session.getCallId();
            Log.d(TAG, "onCalling. call ID: " + callId);
        }
        //add more methods if you want to
    };

    SipSession ss = manager.createSipSession(sipProfile, sessionListener);
    if(ss == null){
        throw new SipException("Failed to create SipSession; Network available?");
    }
    testCall.makeCall(peerProfile, ss, timeout);
    Log.d(TAG,"iD: " + ss.getCallId());
    return testCall;
}

我们只需创建自己的
SipAudioCall
对象,而不是使用我们的管理器进行呼叫。我们使用管理器创建一个
SipSession
,我们将在使用
SipAudioCall
对象进行调用的方法中使用它。

在sip会话中设置调用Id之前可能需要一段时间,给您一个空的调用Id,但是如果您执行
Thread.sleep(100)
ss.getCallId()之前
肯定会给你电话号码。