簡體   English   中英

Android SipManager注冊失敗

[英]Android SipManager registration failed

我遵循Google的指南,在https://developer.android.com/guide/topics/connectivity/sip.html中創建應用SIP呼叫。我在sip.zadarma.com上創建了一個測試帳戶,該帳戶與SIP客戶端配合使用我從Google Play下載但是當我嘗試在我的應用中注冊時,我得到:onRegistrationFailed errorCode = -4 errorMessage:注冊未運行onRegistrationFailed errorCode = -9 errorMessage:0

@Override
protected void onResume() {
    super.onResume();

    if (mNumberKeyedIn == null)
        mNumberKeyedIn = "";
    if (hasSIPPermissions()) {
        initializeSIP();
    } else {
        requestSIPPermission();
    }
}

@Override
public void onPause() {
    super.onPause();
    closeLocalProfile();
}

public void closeLocalProfile() {
    if (mSipManager == null) {
        return;
    }

    try {
        if (mSipProfile != null) {
            mSipManager.close(mSipProfile.getUriString());
            if (mSipManager.isRegistered(mSipProfile.getProfileName()))
                mSipManager.unregister(mSipProfile, null);
        }
    } catch (Exception e) {
        Log.d(TAG, "Failed to close local profile.", e);
    }
}

private void initializeSIP() {

    if (callReceiver == null) {
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.xxxx.android.apps.xxxx.activity.INCOMING_CALL");
        callReceiver = new IncomingCallReceiver();
        this.registerReceiver(callReceiver, filter);
    }

    try {
        if (mSipManager == null) {
            mSipManager = SipManager.newInstance(this);
            if (!SipManager.isVoipSupported(this)) {
                Toast.makeText(this, getString(R.string.sip_not_supported), Toast.LENGTH_SHORT).show();
                return;
            }
            if (SipManager.isSipWifiOnly(this)) {
                Toast.makeText(this, getString(R.string.sip_wifi_only), Toast.LENGTH_SHORT).show();
            }
        }

        if (mSipProfile != null) {
            closeLocalProfile();
        }

        SipProfile.Builder builder = new SipProfile.Builder(BuildConfig.SIP_USERNAME, BuildConfig.SIP_DOMAIN);
        builder.setPassword(BuildConfig.SIP_PASSWORD);
        //builder.setProtocol("TCP");
        //builder.setAuthUserName(BuildConfig.SIP_USERNAME);
        //builder.setPort(5060);
        //builder.setOutboundProxy(BuildConfig.SIP_OUTBOUND_PROXY);
        builder.setAutoRegistration(true);
        mSipProfile = builder.build();

        Intent intent = new Intent();
        intent.setAction("com.xxxx.android.apps.xxxx.activity.INCOMING_CALL");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
        mSipManager.open(mSipProfile, pendingIntent, null);
        mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() {

            public void onRegistering(String localProfileUri) {
                updateStatus(getString(R.string.sip_registering), R.drawable.circle_orange, false);
                Log.d(TAG, "onRegistering " + localProfileUri);
            }

            public void onRegistrationDone(String localProfileUri, long expiryTime) {
                updateStatus(getString(R.string.sip_ready), R.drawable.circle_green, true);
                Log.d(TAG, "onRegistrationDone " + localProfileUri + " expiryTime = " + expiryTime);
            }

            public void onRegistrationFailed(String localProfileUri, int errorCode,
                                             String errorMessage) {
                updateStatus(getString(R.string.sip_registration_failed), R.drawable.circle_red, false);
                Log.e(TAG, "onRegistrationFailed " + localProfileUri + " errorCode = " + errorCode + " errorMessage: " + errorMessage);
            }
        });
    } catch (ParseException e) {
        e.printStackTrace();
        Toast.makeText(this, getString(R.string.sip_not_configured), Toast.LENGTH_SHORT).show();
    } catch (SipException e) {
        e.printStackTrace();
        Toast.makeText(this, getString(R.string.oops_something_went_wrong_short), Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, getString(R.string.sip_not_supported), Toast.LENGTH_SHORT).show();
    }
}

任何幫助都感激不盡。

在嘗試使用SipClient代碼之前,應先嘗試以下解決方案來測試注冊服務器。

  1. 嘗試運行任何VoIP SoftPhone客戶端來檢查您的服務器,如果它不工作然后首先調試即PortNo / IP地址問題。
  2. 如果第一步正在運行,則嘗試在服務器上運行Wireshark以跟蹤來自客戶端的傳入REGISTRATION請求的回復。

雖然來自文本的“錯誤日志”表示IP地址可ping,但未打開注冊端口號。

我不認為這是代碼問題。 肯定是你的設置問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM