Android SIP pila: NullPointerException en el registro

He estado escribiendo código en un HTC Desire Z corriendo 2.3.3 y funciona bien – ahora he venido a probarlo en otro dispositivo (Nexus Uno que ejecuta 2.3.4), y se bloquea. Aquí está el código:

if (me == null || sipManager == null || listener == null){ Log.e("OH","NO"); } sipManager.register(me, 30, listener); 

Ninguna de las cosas que paso a sipManager.register son nulas (el registro nunca se llama), pero aquí está mi rastreo de la pila:

 FATAL EXCEPTION: main java.lang.RuntimeException: Unable to create service com.myapp.Service: java.lang.NullPointerException at android.app.ActivityThread.handleCreateService(ActivityThread.java:1955) at android.app.ActivityThread.access$2500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.net.sip.SipManager.register(SipManager.java:474) at com.myapp.Service.onCreate(Service.java:159) at android.app.ActivityThread.handleCreateService(ActivityThread.java:1945) ... 10 more 

Mirar la fuente de Android no parece revelar nada obvio tampoco – todo lo que estoy pasando a él es válido en otro dispositivo.

Ambos dispositivos están ejecutando 2.3+ y ambos tienen la pila SIP habilitada:

 if (SipManager.isVoipSupported(this) && SipManager.isApiSupported(this)){ 

EDITAR:

Esta es una actividad completa que replica el problema:

 public class SIPTest extends Activity { public SipManager sipManager = null; SipProfile me = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (SipManager.isVoipSupported(this) && SipManager.isApiSupported(this)){ // SIP is supported, let's go! Log.e("SIP", "SUPPORTED"); sipManager = SipManager.newInstance(this); String username = "username"; String password = "password"; String domain = "example.org"; try { SipProfile.Builder builder = new SipProfile.Builder(username, domain); builder.setPassword(password); builder.setDisplayName(username); builder.setProfileName(username + "@" + domain); me = builder.build(); sipManager.register(me, 30, new SipRegistrationListener() { public void onRegistering(String localProfileUri) { Log.e("SIP","Registering with SIP Server..."); } public void onRegistrationDone(String localProfileUri, long expiryTime) { Log.e("SIP","Ready!"); } public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) { Log.e("SIP","Registration failed. " + errorMessage + " ("+errorCode+") - " + localProfileUri); } }); } catch (ParseException pe) { Log.e("SIP","Connection Error."); } catch (SipException se) { Log.e("SIP","Connection error."); } } } } 

Simplemente coloque sipManager.open (me); Antes de que sipManager.register () se ejecute como nueva sesión de sip que se debe crear.

¡Cuídate!

Parece que hay un error en el código de Android.

Puede ver en los registros que Sipsession intenta llamar a OnRegisteredDone pero falla debido a un puntero nulo

Me di cuenta de un montón de puntero nulo de la sipsessión, esto es lo que está causando problemas de registro en el sipmanager

04-26 00: 05: 20.946: D / Dialapp (18910): ActivitySIPCallScreen: SipRegistrationListener \ onRegisteringDone sip: [email protected].1.1
04-26 00: 05: 20.946: D / Dialapp (18910): ActivitySIPCallScreen: updateStatus \ String \ Registered sip: [email protected].1.1
04-26 00: 05: 20.946: W / SipSession (1937): onRegistrationDone ()
04-26 00: 05: 20.946: W / SipSession (1937): java.lang.NullPointerException
04-26 00: 05: 20.946: W / SipSession (1937): en android.os.Parcel.readException (Parcel.java:1328)
04-26 00: 05: 20.946: W / SipSession (1937): en android.os.Parcel.readException (Parcel.java:1276)
04-26 00: 05: 20.946: W / SipSession (1937): en android.net.sip.ISipSessionListener $ Stub $ Proxy.onRegistrationDone (ISipSessionListener.java:416)
04-26 00: 05: 20.946: W / SipSession (1937): en com.android.server.sip.SipSessionListenerProxy $ 10.run (SipSessionListenerProxy.java:173)
04-26 00: 05: 20.946: W / SipSession (1937): en java.lang.Thread.run (Thread.java:1027)

Ha habido problemas similares relacionados con el nexo uno y SIP informó en la lista de problemas: http://code.google.com/p/android/issues/detail?id=17078&q=SIP%20register&colspec=ID%20Type%20Status%20Owner % 20Summary% 20Stars

Yo sugeriría paso a través de una depuración en ese momento en el seguimiento de los parámetros que configuran el ISipSession. Puede ser que algunos de ellos se están configurando incorrectamente debido a una configuración del sistema.

Código para que otros exploren

Esta es la línea en cuestión para otros que buscan el problema: http://www.google.com/codesearch#uX1GffpyOZk/voip/java/android/net/sip/SipManager.java&q=package:android.git%20SipManager.java&l = 474

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.