我想用我的程序做一个voip Call

时间:2013-11-06 09:10:46

标签: android sip voip

我目前正在开发一个用于拨打VoIP / SIP电话的应用程序,但我不知道为什么我无法使用我的程序拨打号码。我有一个有效的SIP server_id,密码和域名。可以使用该域调用。编程代码如下。谁能帮我吗?

public class CallActivity extends Activity {
    public String sipAddress = "nizamcs@sip2sip.info";
    public SipManager manager = null;
    public SipProfile me = null;
    public SipAudioCall call = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calling);
    initializeManager();
}
public void initializeManager() {
    if (manager == null) {
        manager = SipManager.newInstance(this);
    }

    initializeLocalProfile();
}
public void initializeLocalProfile() {
    if (manager == null) {
        return;
    }
    if (me != null) {
        closeLocalProfile();
    }
    String username = "my_username";
    String domain = "my_domain";
    String password = "my_password";
    if (username.length() == 0 || domain.length() == 0 || password.length() == 0) {
        return;
    }

    try {
        SipProfile.Builder builder = new SipProfile.Builder(username, domain);
        builder.setPassword(password);
        me = builder.build();

        Intent i = new Intent();
        i.setAction("android.SipDemo.INCOMING_CALL");
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
        manager.open(me, pi, null);




        manager.setRegistrationListener(me.getUriString(), new SipRegistrationListener() {
                public void onRegistering(String localProfileUri) {
                      Log.d("onRegistering", "Registering with SIP Server...");
                }

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

                }

                public void onRegistrationFailed(String localProfileUri, int errorCode,
                        String errorMessage) {
                    Log.d("onRegistrationFailed", "RegistrationFailed");

                }
            });
    } catch (ParseException pe) {
    } catch (SipException se) {
    }

    initiateCall();
}
  public void closeLocalProfile() {
        if (manager == null) {
            return;
        }
        try {
            if (me != null) {
                manager.close(me.getUriString());
            }
        } catch (Exception ee) {
            Log.d("WalkieTalkieActivity/onDestroy",
                    "Failed to close local profile.", ee);
        }
    }
  public void initiateCall() {


        try {
            SipAudioCall.Listener listener = new SipAudioCall.Listener() {

                @Override
                public void onCallEstablished(SipAudioCall call) {
                    call.startAudio();
                    call.setSpeakerMode(true);
                    call.toggleMute();
                   // updateStatus(call);
                }

                @Override
                public void onCallEnded(SipAudioCall call) {
                }
            };

            call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 300);

        }
        catch (Exception e) {
            Log.i("WalkieTalkieActivity/InitiateCall", "Error when trying to close manager.", e);
            if (me != null) {
                try {
                    manager.close(me.getUriString());
                } catch (Exception ee) {
                    Log.i("WalkieTalkieActivity/InitiateCall",
                            "Error when trying to close manager.", ee);
                    ee.printStackTrace();
                }
            }
            if (call != null) {
                call.close();
            }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

请使用wireshark检查您的请求是否正在发送,并查看您从SIP服务器获得的响应。通过这样做,您可以确定请求是否实际发送。