我对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自己的演示相比,我对代码进行了两次审查,但一无所获。在询问之前,我还搜索了一下,我发现唯一与此相关的是将协议设置为TCP,但它并没有解决我的问题。
发布于 2013-01-02 08:07:49
您可以尝试像https://www.linphone.org/eng/linphone/register-a-linphone-account.html这样的免费服务sip并对其进行测试,它通过sip帐户链接电话对我起作用。
发布于 2012-07-26 05:15:58
您是否检查了以下函数是否返回true:
isVoipSupported()和isApiSupprted().还检查您的SIP帐户是否工作。
发布于 2015-06-29 13:35:44
builder.setPort(5060);
builder.setProtocol("TCP");
builder.setOutboundProxy("proxy.sipthor.net");
me = builder.build();https://stackoverflow.com/questions/11659834
复制相似问题