2011-04-24 182 views
7

我正在开发一个SIP应用程序,并且当我想呼叫某人(在服务器中配置其标识符时),我有一个NullPointerException =>“尝试关闭管理器时出错。 下面是代码:尝试呼叫时发生异常(SIP)

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

在什么行中抛出异常? – 2011-04-26 03:09:46

回答

8

Android模拟器默认不支持VOIP/SIP库。问题是这就是为什么你得到NullPointerException。

幸运的是,有一个工作轮。下载this link并将其复制到... \。android \ avd \ .avd文件夹中。

启动模拟器和

Boolean voipSupported = SipManager.isVoipSupported(this); 
Boolean apiSupported = SipManager.isApiSupported(this); 

现在应该返回true。

来源:http://xilard.hu/

+0

链接不工作了... – 2017-10-13 11:59:29

-3

入住Android的桥连接,并在应用中获得应用程序的SIP关键SIP服务器。

0

Android.net.sip(Sip API)仅适用于Android 2.3及更高版本的G711。 此外,运营商提供的手机可能会使SIP堆栈(android.net.sip)被阻止或瘫痪。 SipManager.isVoipSupported(this) & & SipManager.isApiSupported(this)将返回false为大多数设备是你的ie。在这种情况下,您的SipManager对象将始终为空。您应该使用第三方库来实现SIP。

有不同的开源sip堆栈库以及互联网上的项目。您可以下载该项目的源代码。 这里是一些流行的开源sip堆栈库允许通过互联网进行语音通话的列表。

Jain sip (I think the best option): 1.

2. Pjsip

Mjsip 3.

4. Doubango

有已经在他们的项目使用这些库不同的开源项目。

1.Jain sip:未在“着名”应用中使用。 2. Sipdroid使用MjSip 3. Csipsimple使用PjSip 4. Imsdroid使用doubango。