我正在尝试运行从Google Andoid示例应用程序下载的SIPDemo,但无法让它运行。
我面临的问题是,在我调用SipManager.open传递一个配置文件和一个待定的意图后,它应该开始与SIP提供商的注册过程,在我的情况下,我使用已经注册的帐户进行连接。但是SipRegistrationListener中的回调都没有被触发。不确定应用程序是否能够注册天气,应用程序甚至能够连接到SIP服务器。
另请注意,我在SipManager.open调用中将null作为listner传递,但在下一行中通过调用SipManager.setRegistrationListener来提供侦听器。
以下是我在下载后稍微修改过的FullScreenActivity的完整代码。
public class CallActivity extends AppCompatActivity {
private static final String INTENT_INCOMING_CALL = "android.SipDemo.INCOMING_CALL";
private static final String TAG_CALL_ACTIVITY = "CallActivity";
public String sipAddress = "yyyyyyyyyyy";
public SipManager mSIPManager;
public SipProfile mLocalSIPProfile;
public SipAudioCall mSIPAudioCall;
public IncomingCallReceiver mCallReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.hide();
}
IntentFilter filter = new IntentFilter();
filter.addAction(INTENT_INCOMING_CALL);
mCallReceiver = new IncomingCallReceiver();
this.registerReceiver(mCallReceiver, filter);
initSIPManager();
}
public void initSIPManager() {
if (mSIPManager == null) {
mSIPManager = SipManager.newInstance(this);
}
if (mSIPManager != null) {
Toast.makeText(this, "Created SIPManager Instance", Toast.LENGTH_SHORT).show();
initLocalProfile();
}
}
/**
* Logs you into your SIP provider, registering this device as the location to
* send SIP calls to for your SIP address.
*/
public void initLocalProfile() {
if (mSIPManager == null) {
return;
}
if (mLocalSIPProfile != null) {
closeLocalProfile();
}
String username = "xxxxxx";
String password = "xxxxxxxxxx";
String domain = "getonsip.com";
try {
SipProfile.Builder builder = new SipProfile.Builder(username, domain);
builder.setPassword(password);
builder.setAuthUserName("xxxxxxxxxxxx");
builder.setDisplayName("xxxxxxx");
builder.setOutboundProxy("sip.onsip.com");
builder.setPort(5080);
mLocalSIPProfile = builder.build();
Intent i = new Intent();
i.setAction(INTENT_INCOMING_CALL);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
mSIPManager.open(mLocalSIPProfile, pi, null);
// This listener must be added AFTER mSIPManager.open is called,
// Otherwise the methods aren't guaranteed to fire.
mSIPManager.setRegistrationListener(mLocalSIPProfile.getUriString(), new SipRegistrationListener() {
public void onRegistering(String localProfileUri) {
Toast.makeText(CallActivity.this, "Registering with SIP Server...", Toast.LENGTH_SHORT).show();
}
public void onRegistrationDone(String localProfileUri, long expiryTime) {
Toast.makeText(CallActivity.this, "Ready", Toast.LENGTH_SHORT).show();
}
public void onRegistrationFailed(String localProfileUri, int errorCode,
String errorMessage) {
Toast.makeText(CallActivity.this, "Registration failed. Please check settings.", Toast.LENGTH_SHORT).show();
}
});
} catch (ParseException pe) {
Toast.makeText(CallActivity.this, "ParseException=" + pe.getMessage(), Toast.LENGTH_SHORT).show();
} catch (SipException se) {
Toast.makeText(CallActivity.this, "SIPException=" + se.getMessage(), Toast.LENGTH_SHORT).show();
}
}
/**
* Closes out your local profile, freeing associated objects into memory
* and unregistering your device from the server.
*/
public void closeLocalProfile() {
Toast.makeText(CallActivity.this, "Closing Profile", Toast.LENGTH_SHORT).show();
if (mSIPManager == null) {
return;
}
try {
if (mLocalSIPProfile != null) {
mSIPManager.close(mLocalSIPProfile.getUriString());
}
} catch (Exception ee) {
Toast.makeText(CallActivity.this, "Exception=" + ee.getMessage(), Toast.LENGTH_SHORT).show();
Log.d(TAG_CALL_ACTIVITY, "Failed to close local profile.", ee);
}
}
}