使用pjsua2 Android保持和取消保持呼叫

时间:2014-07-29 07:09:17

标签: android sip voip pjsip

我在Android版本2.2.1中使用pjsua2。 我可以使用以下方式暂停通话:

    CallOpParam prm = new CallOpParam();
    prm.setOptions(pjsua_call_flag.PJSUA_CALL_UPDATE_CONTACT.swigValue());

    try {
        currentCall.setHold(prm)
    } catch(Exception e) {
        e.printStackTrace();
    }

要取消电话,我试过这个,但是不起作用:

    CallOpParam prm = new CallOpParam();
    prm.setOptions(pjsua_call_flag.PJSUA_CALL_UNHOLD.swigValue());

    try {
        currentCall.reinvite(prm);
    } catch(Exception e) {
        e.printStackTrace();
    }

这是pjsua的错误吗?我该如何调用reinvite方法?

3 个答案:

答案 0 :(得分:8)

查看我的代码:

public void holdCall() {
    CallOpParam prm = new CallOpParam(true);

    try {
        currentCall.setHold(prm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void unHoldCall() {
    CallOpParam prm = new CallOpParam(true);

    prm.getOpt().setFlag(1);
    try {
        currentCall.reinvite(prm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

根据this issue,有必要在CallOpParam上设置标记。

常量PJSUA_CALL_UNHOLD == 1,但我无法直接使用PJSUA_CALL_UNHOLD

我正在使用Asterisk而且它正在运行。

答案 1 :(得分:2)

要在版本2.4.5中解锁我需要的电话:

CallOpParam prm = new CallOpParam();
CallSetting opt = prm.getOpt();
opt.setAudioCount(1);
opt.setVideoCount(0);
opt.setFlag(pjsua_call_flag.PJSUA_CALL_UNHOLD.swigValue());
call.reinvite(prm);

答案 2 :(得分:1)

这是另一个例子:

public void setHold(boolean hold) {
    CallOpParam param = new CallOpParam();

    try {
        if (hold) {
            setHold(param);
        } else {
            CallSetting opt = param.getOpt();
            opt.setAudioCount(1);
            opt.setVideoCount(0);
            opt.setFlag(pjsua_call_flag.PJSUA_CALL_UNHOLD.swigValue());
            reinvite(param);
        }
    } catch (Exception exc) {
        String operation = hold ? "hold" : "unhold";
        Logger.error(LOG_TAG, "Error : ", exc);
    }
}

您可以找到here完整实施。