android - SIP注册失败

标签 android sip

我遇到 SIP API 问题。我正在按照 d.android.com 上的指南进行操作并从 sip2sip.info 获得了一个免费的 SIP 帐户来测试我的应用程序。 更新:我尝试了 ekiga.net 并且我自己也设置了一个 Kamailio 服务器,但这些都没有帮助。

每当我尝试注册我的个人资料时,都会失败并显示错误消息“0”。这是代码:

package com.mysys.mysip;

import java.text.ParseException;

import android.net.sip.SipException;
import android.net.sip.SipManager;
import android.net.sip.SipProfile;
import android.net.sip.SipRegistrationListener;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    public SipManager mSipManager = null;
    public SipProfile mSipProfile = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (mSipManager == null) {
            mSipManager = SipManager.newInstance(this);
        }

        Button connectButton = (Button) findViewById(R.id.buttonConnect);
        connectButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                buildProfile();
                if (mSipProfile != null) {
                    openProfile();
                }
            }
        });
    }

    public void buildProfile() {
        try {
            SipProfile.Builder builder = new SipProfile.Builder("censored", "sip2sip.info");
            builder.setPassword("censored");
            mSipProfile = builder.build();
        } catch (ParseException e) {
            Log.e("SipProfile.Builder", "Parse error!");
            e.printStackTrace();
        }
    }

    public void openProfile() {
        Intent intent = new Intent();
        intent.setAction("com.mysys.sip.INCOMING_CALL");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);

        SipRegistrationListener listener = new SipRegistrationListener() {
            @Override
            public void onRegistering(String localProfileUri) {
                Log.i("SIP Registration", "Registering.");
                updateStatus("Registering...");
            }

            @Override
            public void onRegistrationDone(String localProfileUri, long expiryTime) {
                Log.i("SIP Registration", "Done!");
                updateStatus("Registered! Yay!");
            }

            @Override
            public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) {
                Log.e("SIP Registration", "Failed! URI: " + localProfileUri + " Reason: " + errorMessage);
                updateStatus("Registration failed.");
            }
        };

        try {
            mSipManager.open(mSipProfile, pendingIntent, null);
            mSipManager.setRegistrationListener(mSipProfile.getUriString(), listener);
        } catch (SipException e) {
            e.printStackTrace();
        }
    }

    public void updateStatus(final String status) {
        this.runOnUiThread(new Runnable() {
            public void run() {
                TextView statusView = (TextView) findViewById(R.id.textViewStatus);
                statusView.setText(status);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_settings:
                Intent intent = new Intent(this, SettingsActivity.class);
                startActivity(intent);
        }
        return super.onOptionsItemSelected(item);
    }
}

看了两遍代码,对比Android SDK自带的demo,一无所获。我在问之前也搜索过,我发现唯一相关的是将协议(protocol)设置为 TCP 但它并没有解决我的问题。

最佳答案

您可以尝试其他免费服务 sip,例如 https://www.linphone.org/eng/linphone/register-a-linphone-account.html并测试它,它通过 sip 帐户 linphone 对我有用

关于android - SIP注册失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659834/

相关文章:

java - 过滤ArrayList并删除不需要的元素

sip - 如何在阻塞的网络中隧道 voip 流量

sip - 通过 Asterisk 调用文件发起时添加 SIP header

android - 多个 Android 设备上的序列号相同。 adb 没用。如何更改序列号?

安卓应用内结算沙盒

android - 将字符串从一个 Activity 的 ListView 传输到 android 中的另一个 Activity

java - 从套接字获取输入流

google-chrome - Asterisk 提供 "Strict RTP learning"消息,但Chrome WebRTC没有音频,但可在Firefox中使用

Python SIP 库

android - 在 Android 上绘制到 Canvas - 屏幕闪烁/撕裂