Android net.sip : manager. makeAudioCall(..) 抛出 sip session 错误

标签 android sip

我正尝试在 Android 上使用 sip 建立通话。我的 list 中的权限是:

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.USE_SIP"/>
<uses-permission android:name="android.permission.INTERNET"/>

存在 CALL_PHONE 权限,因为我的应用程序也可以调用常规号码。
这是 Activity 代码:

package x.x.x;

import java.text.ParseException;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.sip.SipAudioCall;
import android.net.sip.SipException;
import android.net.sip.SipManager;
import android.net.sip.SipProfile;
import android.os.Bundle;
import android.util.Log;

public class CallScreen extends Activity{
public SipManager manager = null;
public SipProfile me = null;
public SipAudioCall call = null;
//IncomingCallReceiver callReceiver;
String domain = "myserver.net";
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.callscreen);

    initManager();
    Log.d("Z:","Done initManger()");
    Thread waiter = new Thread(){
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                sleep(10000);
                Log.d("Z:","Done waiting");
                initCall();
                Log.d("Z:","Done initCall");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    waiter.start();

    //initCall();

}
public void initManager()
{
    manager = SipManager.newInstance(this);
    initLocalProfile();
}
public void initLocalProfile()
{
    String username = "user";
    String password = "12345";
    String domain = "myserver.net";
    try {
        SipProfile.Builder builder = new SipProfile.Builder(username,domain);
        builder.setPassword(password);
        me = builder.build();
        //Intent intent = new Intent(); 
        //PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
        //manager.open(me,pi,null);
        manager.open(me);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SipException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
public void initCall()
{
    SipAudioCall.Listener listener = new SipAudioCall.Listener(){
        @Override
        public void onCallEstablished(SipAudioCall call) {
            // TODO Auto-generated method stub
            //super.onCallEstablished(call);
            call.startAudio();
            call.setSpeakerMode(true);
            call.toggleMute();
        }
        @Override
        public void onCallEnded(SipAudioCall call) {
            // TODO Auto-generated method stub
            super.onCallEnded(call);
        }
    };
    try {
        call = manager.makeAudioCall(me.getUriString(), "12345678910", listener, 30);
    } catch (SipException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

logcat 上显示的错误:

01-26 22:20:25.710: D/SipAudioCall(31060): sip session error: CLIENT_ERROR: libcore.io.ErrnoException: getaddrinfo failed: ENOENT (No such file or directory)

在我稍微不同地组织这段代码之前,我试图让这个小例子工作(例如,用户名和密码不是硬编码的)。我对 sip 也不是很熟悉。真的很感激任何建议。
有任何想法吗?谢谢!

最佳答案

问题出在以下行:

call = manager.makeAudioCall(me.getUriString(), "12345678910", listener, 30);

makeAudioCall 方法的第二个参数 must be 要调用的 SIP 配置文件的 URI,但您只提供了它的用户名(即:“12345678910”)。将其更改为:

call = manager.makeAudioCall(me.getUriString(), "sip:12345678910@myserver.net", listener, 30);

关于Android net.sip : manager. makeAudioCall(..) 抛出 sip session 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541404/

相关文章:

ios - 是否允许在 iOS 的静态库中使用 dlopen

java - 地理编码器的 RPC 错误

android - zipalign : error while loading shared libraries: libc++. 所以:无法打开共享对象文件:没有这样的文件或目录

java - 在android项目中集成Liblinphone 4

c++ - C++ 中的 SIP 和 RTP 实现

sip - 使用 opensips 1.11(Ubuntu 14.04) 配置用户

java - 将分钟转换为毫秒 Java/android

android - 单击后隐藏 ListView

android - React Navigation 'beforeRemove' 事件未在 React Native 中触发

android - 如何将 SIP 集成到 Android 中?