SIP注册监听器未触发。

4
我在android本地SIP注册方面遇到了一些问题。有时它似乎可以正常注册,但有时它会注册和注销,还有一些情况下它根本不起作用,从未进入回调函数。 请问我做错了什么吗?
我在一个服务中有一个名为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,并不断地从应用程序客户端接收“options”消息,但只有少量的“register”消息。


你解决了这个问题吗? - Massimo
1个回答

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接