我正在开发SIP应用程序,当我想要呼叫某人(在服务器中配置了其标识符)时,我有一个NullPointerException => “试图关闭经理时出错。” 这是代码:
public void initiateCall() {
updateStatus(sipAddress);
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onCallEstablished(SipAudioCall call) {
call.startAudio();
call.setSpeakerMode(true);
call.toggleMute();
updateStatus(call);
}
@Override
public void onCallEnded(SipAudioCall call) {
updateStatus("Ready.");
}
};
call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 30);
}
catch (Exception e) {
Log.i("WalkieTalkieActivity/InitiateCall", "Error when trying to close manager.", e);
if (me != null) {
try {
manager.close(me.getUriString());
} catch (Exception ee) {
Log.i("WalkieTalkieActivity/InitiateCall",
"Error when trying to close manager.", ee);
ee.printStackTrace();
}
}
if (call != null) {
call.close();
}
}
}
感谢您的帮助。
答案 0 :(得分:8)
Android模拟器默认不支持VOIP / SIP库。问题是,manager == null
- 这就是你获得NullPointerException的原因。
幸运的是,有一个圆满的工作。下载this link并将其复制到 ... \ .android \ avd \ .avd 文件夹中。
启动您的模拟器和
Boolean voipSupported = SipManager.isVoipSupported(this);
Boolean apiSupported = SipManager.isApiSupported(this);
现在应该返回true。
答案 1 :(得分:0)
Android.net.sip(Sip API)仅适用于Android 2.3+以上的G711。
运营商提供的手机也可能阻止SIP堆栈(android.net.sip)或瘫痪。 SipManager.isVoipSupported(this)
&& SipManager.isApiSupported(this)
将返回false,因为大多数设备都是你的ie。在这种情况下,您的SipManager对象将始终为null。您应该使用第三方库来实现SIP。
有不同的开源sip堆栈库以及互联网上的项目。您可以下载该项目的源代码。 这是一些流行的开源sip堆栈库的列表,它允许通过互联网进行语音呼叫。
1。Jain sip (I think the best option):
2. Pjsip
3。Mjsip
4。Doubango
有不同的开源项目在他们的项目中使用了这些库。
1.Jain sip:不用于“着名”应用程序。 2. Sipdroid使用MjSip 3. Csipsimple使用PjSip Imsdroid使用doubango。
答案 2 :(得分:-3)
检查Android中的桥接连接和应用程序中的SIP服务器,以获取应用程序的SIP密钥。