我在android中注册本机SIP有些问题。似乎有时它会正确地注册而没有问题,但其他人注册和注销,还有其他什么都不做,从不进入回调。 有人可能会给我一些错误的线索吗?
我在服务中有initSIP()方法,这里是:
private void initSIP()
{
Toast.makeText(ctxt, "init SIP", Toast.LENGTH_LONG).show();
if ((MyApplication)getApplication()).mSipManager == null)
{
return;
}
closeLocalProfile();
SipProfile.Builder builder = null;
try
{
SharedPreferences prefs = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
String phone = ((MyApplication)getApplication()).js_config.getString("sipuser");
String pass = ((MyApplication)getApplication()).js_config.getString("sippass");
builder = new SipProfile.Builder(phone, "127.0.0.1");
builder.setPassword(pass);
builder.setPort(5060);
((MyApplication)getApplication()).mSipProfile = builder.build();
Intent intent = new Intent();
intent.setAction("android.SipDemo.INCOMING_CALL");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
((MyApplication)getApplication()).mSipManager.open(((MyApplication) getApplication()).mSipProfile, pendingIntent, null);
((MyApplication)getApplication()).mSipManager.setRegistrationListener(((MyApplication)getApplication()).mSipProfile.getUriString(), new SipRegistrationListener()
{
public void onRegistering(String localProfileUri)
{
Log.v("IncomingSipCallsService", "Registering with SIP Server...");
}
public void onRegistrationDone(String localProfileUri, long expiryTime)
{
Log.v("IncomingSipCallsService", "Ready");
((MyApplication)getApplication()).status_SIP = MyApplication.SIP_READY;
}
public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage)
{
((MyApplication)getApplication()).status_SIP = MyApplication.SIP_UNREADY;
Log.v("SipCallsService", "Registration failed. Please check settings.");
Log.v("SipCallsService", "URI: " + localProfileUri + " ERROR: " + errorCode + " " + errorMessage);
}
});
}
catch (ParseException e)
{
e.printStackTrace();
Toast.makeText(ctxt, e.getMessage(), Toast.LENGTH_LONG).show();
}
catch (SipException ex)
{
ex.printStackTrace();
Toast.makeText(ctxt, ex.getMessage(), Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(ctxt, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
在服务器端,我们有Asterisk,并且不断收到来自应用客户端的“选项”消息,但有一些“注册”消息。
答案 0 :(得分:0)
遗憾的是,在开发应用程序时,有时Android本机SIP服务会卡住,并且永远不会触发注册侦听器。因此,如果在30秒内触发了监听器的任何方法,我们将选择显示一个屏幕,要求用户重新启动设备。
我们在开发应用程序时以及当您在发布模式下使用一个签名然后又使用另一个签名(例如,在设置发布生产签名之前和之后)运行该应用程序时,我们都经历过。因此,这不应该在现实世界中发生...但是为了以防万一,我们决定添加请重新启动屏幕。