SIP 注册侦听器未触发

Posted

技术标签:

【中文标题】SIP 注册侦听器未触发【英文标题】:SIP registration listener is not firing 【发布时间】:2015-04-10 11:55:19 【问题描述】:

我在 android 中的本地 SIP 注册有一些问题。似乎有时它可以正确注册而没有问题,但其他人它注册和注销,还有其他人什么都不做并且从不进入回调。 有人可能会提供一些线索我做错了什么?

我在 Service 中有方法 initSIP(),这里是:

private void initSIP()

    Toast.makeText(ctxt, "init SIP", Toast.LENGTH_LONG).show();

    if ((MyApplication)getApplication()).mSipManager == null)
    
        return;
    

    closeLocalProfile();

    SipProfile.Builder builder = null;
    try
    
        SharedPreferences prefs = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);

        String phone = ((MyApplication)getApplication()).js_config.getString("sipuser");
        String pass = ((MyApplication)getApplication()).js_config.getString("sippass");

        builder = new SipProfile.Builder(phone, "127.0.0.1");
        builder.setPassword(pass);

        builder.setPort(5060);

        ((MyApplication)getApplication()).mSipProfile = builder.build();
        Intent intent = new Intent();
        intent.setAction("android.SipDemo.INCOMING_CALL");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);

        ((MyApplication)getApplication()).mSipManager.open(((MyApplication) getApplication()).mSipProfile, pendingIntent, null);

        ((MyApplication)getApplication()).mSipManager.setRegistrationListener(((MyApplication)getApplication()).mSipProfile.getUriString(), new SipRegistrationListener()
        

            public void onRegistering(String localProfileUri)
            
                Log.v("IncomingSipCallsService", "Registering with SIP Server...");
            

            public void onRegistrationDone(String localProfileUri, long expiryTime)
            
                Log.v("IncomingSipCallsService", "Ready");
                ((MyApplication)getApplication()).status_SIP = MyApplication.SIP_READY;
            

            public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage)
            
                ((MyApplication)getApplication()).status_SIP = MyApplication.SIP_UNREADY;
                Log.v("SipCallsService", "Registration failed.  Please check settings.");
                Log.v("SipCallsService", "URI: " + localProfileUri + " ERROR: " + errorCode + " " + errorMessage);
            
        );
    
    catch (ParseException e)
    
        e.printStackTrace();
        Toast.makeText(ctxt, e.getMessage(), Toast.LENGTH_LONG).show();

    
    catch (SipException ex)
    
        ex.printStackTrace();
        Toast.makeText(ctxt, ex.getMessage(), Toast.LENGTH_LONG).show();
    
    catch (Exception e)
    
        e.printStackTrace();
        Toast.makeText(ctxt, e.getMessage(), Toast.LENGTH_LONG).show();
    


在服务器端,我们有 Asterisk,并且不断从应用客户端接收“选项”消息,但也有一些“注册”消息。

【问题讨论】:

这个问题你解决了吗? 【参考方案1】:

遗憾的是,当您开发应用程序时,有时 Android 原生 SIP 服务会卡住,并且注册监听器永远不会被触发。因此,如果侦听器的任何方法在 30 秒内被触发,我们会选择显示一个请求用户重启设备的屏幕。

我们在开发应用程序时以及当您在发布模式下使用一个签名然后使用另一个签名运行应用程序时(例如,在设置发布生产签名之前和之后)时遇到过这种情况。所以,这不应该在现实世界中发生......但以防万一,我们决定添加请重启屏幕。

【讨论】:

以上是关于SIP 注册侦听器未触发的主要内容,如果未能解决你的问题,请参考以下文章

更新身份验证状态时未调用 Bloc 侦听器?

鼠标键挂钩 - 键侦听器未触发

Spring boot OAuth成功登录侦听器未触发

本地存储中的更改未触发事件侦听器

事件侦听器 MSPointer 未触发

侦听器 '$cordovaLocalNotification:trigger' 未触发,因为 '$cordovaLocalNotification:scheduled' 正在工作