我正在开发一个 sip 应用程序,它可以啜饮和啜饮其他电话。我也想记录两者。最后发现linphone-sdk可以解决问题。我已将 Linphone-sdk 从他们的 maven 存储库集成到我的应用程序中。我正在使用另一个 Sip 客户端进行通话(不是 linphone 帐户)。拨出电话工作正常。但是,每当我们收到对 sip 帐户的来电时,应用程序就会因 log cat 中的错误而终止。
正如这个问题所回答的那样,我将相应的 linphone 服务更改为一个长时间运行的服务,当应用程序不在前台时,它可以接收来电。但这并不能解决问题。
mHandler = new Handler();
// This will be our main Core listener, it will change activities depending on events
mCoreListener = new CoreListenerStub() {
@Override
public void onCallStateChanged(Core core, Call call, Call.State state, String message) {
android.util.Log.i(TAG, "onCallStateChanged: ");
if (state == Call.State.IncomingReceived || state == Call.State.IncomingEarlyMedia) {
Log.i(TAG, "onCallReceived: ");
// For this sample we will automatically answer incoming calls
CallParams params = getCore().createCallParams(call);
params.enableVideo(false);
call.acceptWithParams(params);
.....
}
};
根据代码,呼叫将被自动应答,但对于来电,onCallStateChanged() 永远不会被调用,逻辑输出如下:
……
2019-07-23 14:56:50.468 9248-9248/com.call.mysipapp I/liblinphone: Found payload AMR/8000 fmtp=mode-change-period=2
2019-07-23 14:56:50.469 9248-9248/com.call.mysipapp I/liblinphone: Found payload AMR/8000 fmtp=mode-change-period=1
--------- beginning of crash
2019-07-23 14:56:50.473 9248-9248/com.call.mysipapp A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x28 in tid 9248 (m.call.mysipapp)