【问题标题】:Android SIP no incoming call event (doubango)Android SIP 无来电事件(doubango)
【发布时间】:2014-08-04 06:41:31
【问题描述】:

我一直在尝试集成 Doubango Sip Stack。

首先,我尝试使用手动和测试调用示例。

但我没有在我的广播接收器中收到 ACTION_INVITE 事件,尽管我已经添加了所有过滤器等。我收到注册事件没有任何问题。

最后我检查了 IMSDroid 架构并做了同样的事情——NativeService 和 Engine,扩展了 ngn 类。向清单等添加服务。

但我仍然没有收到来电事件,虽然我收到了注册事件。

我在这里做错了什么?方法是什么?

附言我的代码看起来很像底部列出的代码: http://kehers.github.io/2014/06/04/sip-on-android.html(见 doubango 示例)

【问题讨论】:

    标签: android events sip phone-call


    【解决方案1】:

    我写了您问题中引用的博客文章。您没有收到来电事件可能有几个原因。您是否为来电注册了接收方?

    @Override
    public void onCreate() {  
      // Get engines
      mEngine = NgnEngine.getInstance();
      mSipService = mEngine.getSipService();
    
      // ...code blocks
    
      // Incoming call broadcast receiver
      final IntentFilter intentRFilter = new IntentFilter();
      callStateReceiver = new CallStateReceiver();
      intentRFilter.addAction(NgnInviteEventArgs.ACTION_INVITE_EVENT);
      registerReceiver(callStateReceiver, intentRFilter);
    }
    

    接收者:

    public class CallStateReceiver extends BroadcastReceiver {
    
      @Override
      public void onReceive(Context context, Intent intent) {
    
        final String action = intent.getAction();
    
        if(NgnInviteEventArgs.ACTION_INVITE_EVENT.equals(action)){
          NgnInviteEventArgs args = 
                    intent.getParcelableExtra(NgnEventArgs.EXTRA_EMBEDDED);
          if(args == null){
            Log.d("DEBUG", "Invalid event args");
            return;
          }
    
          NgnAVSession avSession
                    = NgnAVSession.getSession(args.getSessionId());
          if (avSession == null) {
            return;
          }
    
          final InviteState callState = avSession.getState();
          NgnEngine mEngine = NgnEngine.getInstance();
    
          switch(callState){
            case NONE:
            default:
            break;
            case INCOMING:
              Log.i("DEBUG", "Incoming call");
              // Ring
              mEngine.getSoundService().startRingTone();
              break;
            case INCALL:
              Log.i("DEBUG", "Call connected");
              mEngine.getSoundService().stopRingTone();
              break;
            case TERMINATED:
              Log.i("DEBUG", "Call terminated");
              mEngine.getSoundService().stopRingTone();
              mEngine.getSoundService().stopRingBackTone();
              break;
          }
        }
      }
    }
    

    其次,您是否使用正确的 SIP 帐户详细信息进行配置?确保将 sip_usernamesip_domainsip_passwordsip_server_portsip_server_host 替换为有效的详细信息.

    NgnEngine mEngine = NgnEngine.getInstance();
    INgnConfigurationService mConfigurationService
                = mEngine.getConfigurationService();
    mConfigurationService.putString(NgnConfigurationEntry.IDENTITY_IMPI,
                                        "sip_username");
    mConfigurationService.putString(NgnConfigurationEntry.IDENTITY_IMPU, 
            String.format("sip:%s@%s", "sip_username", "sip_domain"));
    mConfigurationService.putString(NgnConfigurationEntry.IDENTITY_PASSWORD,
                                        "sip_password");
    mConfigurationService.putString(NgnConfigurationEntry.NETWORK_PCSCF_HOST, 
                                        "sip_server_host");
    mConfigurationService.putInt(NgnConfigurationEntry.NETWORK_PCSCF_PORT, 
                                        "sip_server_port");
    mConfigurationService.putString(NgnConfigurationEntry.NETWORK_REALM,
                                        "sip_domain");
    mConfigurationService.commit();
    

    希望这会有所帮助。

    【讨论】:

    • 事实证明,您的活动,使用 doubango 顶级 api 的设计应该像他们的 ims droid 示例一样。在将 ims droid 设计移植到我的应用程序后,事件发生了。太疯狂了,手册中没有这方面的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多