Android VOIP SipException: Error al crear SipSession

Estoy tratando de ejecutar una llamada VOIP utilizando construido en SIP en Android 3.1. Tengo un dispositivo de tableta física (galaxia Tab 10.1).

Para fines de prueba, he creado un proyecto de SipDemo ejemplo – funciona bien! (Lo que significa que mis credenciales están funcionando y mi dispositivo / red está bien).

Mi Manifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="modera.com.doorcontroller" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/logoeditedsmall" android:label="@string/app_name" android:debuggable="true"> <activity android:name="MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="CallActivity"></activity> </application> <uses-sdk android:minSdkVersion="11" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.USE_SIP" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-feature android:name="android.hardware.sip.voip" android:required="true" /> <uses-feature android:name="android.hardware.wifi" android:required="true" /> <uses-feature android:name="android.hardware.microphone" android:required="true" /> </manifest> 

Mi código de backend:

 public void initializeManager() { if (manager == null) { manager = SipManager.newInstance(this); } if (me != null) { closeLocalProfile(); } try { SipProfile.Builder builder = new SipProfile.Builder(username, domain); builder.setPassword(password); builder.setOutboundProxy(proxy); me = builder.build(); manager.open(me); manager.setRegistrationListener(me.getUriString(), new SipRegistrationListener() { @Override public void onRegistering(String localProfileUri) { Log.i("MY", "onRegistering"); } @Override public void onRegistrationDone(String localProfileUri, long expiryTime) { Log.i("MY", "onRegistrationDone"); } @Override public void onRegistrationFailed( String localProfileUri, int errorCode, String errorMessage) { Log.i("MY", "onRegistrationFailed"); } }); } catch (ParseException pe) { Log.e("MY", pe.toString()); } catch (SipException se) { Log.e("MY", se.toString()); } } public void initiateCall() { try { SipAudioCall.Listener listener = new SipAudioCall.Listener() { @Override public void onCallEstablished(SipAudioCall call) { call.startAudio(); call.setSpeakerMode(true); call.toggleMute(); Log.i("MY", "oonCallEstablished"); } @Override public void onCallEnded(SipAudioCall call) { Log.i("MY", "onCallEnded"); } }; call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 30); } catch (Exception e) { Log.e("MY", e.toString()); if (me != null) { try { manager.close(me.getUriString()); } catch (Exception ee) { Log.e("MY", ee.toString()); } } if (call != null) { call.close(); } } } 

Ejecutando este código (al principio initalize, usando initalizeManager y luego ejecuto initateCall) Recibo una excepción:

 android.net.sip.SipException: Failed to create SipSession; network unavailable? 

… y registros de LogCat:

 07-14 13:35:16.200: ERROR/SipService(364): openToMakeCalls() 07-14 13:35:16.200: ERROR/SipService(364): javax.sip.SipException: only creator can access the profile 07-14 13:35:16.200: ERROR/SipService(364): at com.android.server.sip.SipService.createGroup(SipService.java:337) 07-14 13:35:16.200: ERROR/SipService(364): at com.android.server.sip.SipService.open(SipService.java:185) 07-14 13:35:16.200: ERROR/SipService(364): at android.net.sip.ISipService$Stub.onTransact(ISipService.java:58) 07-14 13:35:16.200: ERROR/SipService(364): at android.os.Binder.execTransact(Binder.java:320) 07-14 13:35:16.200: ERROR/SipService(364): at dalvik.system.NativeStart.run(Native Method) 07-14 13:35:16.200: WARN/SipService(364): only creator can set listener on the profile 07-14 13:35:16.230: WARN/SipService(364): only creator or radio can close this profile 

Google no ha dado ningún resultado, porque no hay suficientes datos en Android 2.3+ SIP, por lo que cada sugerencia que haces me ayuda mucho!

Problema resuelto: No puede llamar a initiateCall () justo después de initializeManager (). Tienes que esperar unos 4 segundos cuando los componentes SIP se han inicializado.

EDIT: parece que todavía hay algún problema con el registro de SipManager: Llamando al usuario No registrado (403). Reinstalar la aplicación y reiniciar el dispositivo resuelve el problema.

  • Cómo enviar mensajes de texto en android vía sip
  • Flujo de aplicaciones para la conexión peer to peer de Android?
  • Error: No se encontró ningún recurso que coincida con el nombre dado (en 'theme' con el valor '@ style / AppTheme')
  • Cómo implementar la aplicación VOIP utilizando el paquete android.net.rtp
  • Las devoluciones de llamada de SipRegistrationListener no se disparan
  • Peer-to-peer llamada SIP con Android SIP Stack?
  • Aplicación a la llamada de voz de aplicación como Viber & Line en android
  • ¿Cómo usar PJSIP en Android?
  • ¿Se recomienda Android para la plataforma del procesador Atom?
  • ¿Hay un api libre de voip para android
  • Sip stack para iphone y android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.