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).
- ¿Soporta Android las API para implementar RTP, RTSP para VoIP y PTT Project?
- Cómo implementar el chat de voz y video
- ¿Cómo integrar SIP en Android?
- Audífono SIP de Android enEncallEnded demora cuando termina la llamada
- Enviar Notificaciones push a iOS / Android en WiFi cerrado (sin conexión a Internet)
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!
- PJSUA2 sip aplicación android nativa
- Chat y aplicación VOIP
- Sipdroid - Otra llamada entrante no se muestra mientras se continúa
- Notificaciones push de VOIP en android
- Implementación de App-to-App llamando a Android
- Problema de calidad de voz en Android VoIP app con PJSIP
- ¿Es factible la adición de una dependencia libjitsi a un proyecto Android?
- Construir PJSIP para Android en Windows?
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.