Android SipManager: android.net.sip.SipException: SipService.createSession () devuelve null

Por lo tanto, he estado codificando esta aplicación Android Sip utilizando Androids Sip biblioteca durante algún tiempo, pero no puedo obtener el registro para trabajar. Actualmente me da el error siguiente cuando llamo SipManager.register() : android.net.sip.SipException: SipService.createSession() returns null .

Mi código:

 public static void Register(final String username, final String password, final String domain, final String cbf) throws ParseException, SipException { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register"); /* * Luodaan SIP-profiili */ SipProfile.Builder builder = new SipProfile.Builder(username, domain); builder.setPassword(password); //builder.setProtocol("TCP"); //builder.setPort(5060); builder.setAutoRegistration(false); _sipprofile = builder.build(); Intent intent = new Intent(); intent.setAction("android.jahtipuhelin.INCOMING_CALL"); PendingIntent pendingIntent = PendingIntent.getBroadcast(_context, 0, intent, Intent.FILL_IN_DATA); _sipmanager.open(_sipprofile, pendingIntent, new SipRegistrationListener() { @Override public void onRegistering(String s) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 0"); } @Override public void onRegistrationDone(String s, long l) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 1"); try { _sipmanager.register(_sipprofile, 30, null); _sipmanager.setRegistrationListener(_sipprofile.getUriString(), new JPSipRegistrationListener(_class, cbf)); } catch (SipException e) { Log.e(MainActivity.LOGTAG,e.getClass().toString()+ ": "+ e.getMessage()); e.printStackTrace(); } } @Override public void onRegistrationFailed(String s, int i, String s2) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - testi 2"); Log.d(MainActivity.LOGTAG, s2); try { _sipmanager.register(_sipprofile, 30, null); _sipmanager.setRegistrationListener(_sipprofile.getUriString(), new JPSipRegistrationListener(_class, cbf)); } catch (SipException e) { Log.e(MainActivity.LOGTAG,e.getClass().toString()+ ": "+ e.getMessage()); e.printStackTrace(); } } });//*/ Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.Register - 2"); } private static class JPSipRegistrationListener implements SipRegistrationListener { private MainActivity _parent; private String _callBack; public JPSipRegistrationListener(MainActivity ma, String callBack) { this._parent = ma; this._callBack = callBack; } @Override public void onRegistering(String localProfileUri) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistering"); _parent.callSub(_callBack, REGISTERING, 0, ""); } @Override public void onRegistrationDone(String localProfileUri, long expiryTime) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistrationDone"); _parent.callSub(_callBack, REGISTRATION_DONE, 0, ""); } @Override public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) { Log.d(MainActivity.LOGTAG, "testi: JahtipuhelinSipManager.onRegistrationFailed"); Log.e(MainActivity.LOGTAG, "Virhe Sip-rekisteröinnissä: "+errorCode+": "+errorMessage); if (errorCode == -10) { return; } _parent.callSub(_callBack, REGISTRATION_FAILED, errorCode, errorMessage); } } 

Ejecutar que da la salida siguiente:

 08-11 18:50:58.276 24449-24449/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register 08-11 18:50:58.436 24449-24465/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register - testi 2 08-11 18:50:58.436 24449-24465/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: registration not running 08-11 18:50:58.446 24449-24449/fi.hieta.aatu.android.jahtipuhelin D/fi.hieta.aatu.android.jahtipuhelin: testi: JahtipuhelinSipManager.Register - 2 08-11 18:50:58.666 24449-24465/fi.hieta.aatu.android.jahtipuhelin E/fi.hieta.aatu.android.jahtipuhelin: class android.net.sip.SipException: SipService.createSession() returns null 

¿Alguien sabe lo que estoy haciendo mal aquí? También, estoy intentando registrar manualmente el perfil del sip, no usando autorregistro. (BTW mi primera pregunta sobre stackoverflow, así que por favor sea amable :))

Parece que hay al menos otra peculiaridad que da como resultado el mismo código de error. Si tienes una cuenta predefinida con la misma URI de solicitud en tu teléfono, la segunda que estás intentando crear en tu aplicación falla de esta manera. Tenga en cuenta que esto sucede incluso si esa cuenta no está configurada para llamadas entrantes (= SIP Register en el backend). Espero que el equipo de Android arreglará este error o al menos lanzará un error significativo.

Actualización: Con esa solución la excepción había desaparecido pero no pude recibir ninguna llamada.

Acabo de encontrar la solución. Tienes que llamar a abrir antes de llamar al registro. Además no utilice un oyente con abierto (el SipDemo dice así, no sé por qué), pero registrarlo después de registrarse (funciona para mí).

Así que mi código es:

 manager.open(localProfile, pendingIntent, null); manager.register(localProfile, 20, listener); manager.setRegistrationListener(localProfile.getUriString(), listener); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.