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:
- Buscando una pila SIP para Android
- Administrador de SipDemo siempre es nulo en el dispositivo SamSung SII android SIP API
- Android SipManager: android.net.sip.SipException: SipService.createSession () devuelve null
- Cómo transferir una llamada SIP utilizando la pila SIP de android incorporada
- Implementar el servidor SIP para android 4.0
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."); } } } }
- Native SIP DTMF para Android
- Llamada de conferencia sip en android api nivel 9
- SIP: ERROR DATA_CONNECTION_LOST
- Sip Error mientras se registra
- Implementación de SIP en la plataforma android 2.1
- Android net.sip: manager.makeAudioCall (..) lanza error de sesión de sip
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