SIP注册侦听器未启动



我在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,它不断收到来自应用程序客户端的"选项"消息,但也有一些"注册"消息。

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

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

最新更新