SIP在Android上注册两次

时间:2014-10-23 08:40:55

标签: android android-intent sip

我试着在android上编写一个简单的SIP应用程序。我使用android API 19并使用asterisk作为SIP服务器。但是我发现每次执行SipManager.open()时,它都会注册两次。当我拨打电话时,两个频道呼叫。

我的代码如下:

                Intent intent = new Intent();
                intent.setAction(ACTION_INCOMING_CALL);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);

                if (mSipManager == null) {
                    mSipManager = SipManager.newInstance(this);
                }
                SipProfile.Builder builder = new SipProfile.Builder("<some sip id>", SIP_SERVER);
                builder.setPassword("<sip password>");

                mSipProfile = builder.build();
                mSipManager.close(mSipProfile.getUriString());

                mSipManager.open(mSipProfile, pendingIntent, null);

                mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() {

                    public void onRegistering(String localProfileUri) {
                        updateStatus("Registering");
                        Log.d("SipActivity", "Registering with SIP Server...");
                    }

                    public void onRegistrationDone(String localProfileUri, long expiryTime) {
                        updateStatus("Ready");
                        Log.d("SipActivity", "Ready");
                    }

                    public void onRegistrationFailed(String localProfileUri, int errorCode,
                        String errorMessage) {
                        updateStatus("Registration failed." + errorCode + " >>>" + errorMessage);
                        Log.d("SipActivity", "Registration failed.  Please check settings." + errorMessage);
                    }
                });

我已经放了日志以确保我打开一次,但日志显示&#34;注册SIP服务器&#34;两次&#34;准备好&#34;两次。

1 个答案:

答案 0 :(得分:1)

我找到了两次注册的原因。 在onRegistrationDone上记录expiryTime后,第一个事件为-1表示会话已过期。因此,由于autoRegister标志为true,它将再次注册。