2013-08-11 3 views
7

Quindi, ho codificato questa applicazione Android Sip utilizzando la libreria di Androids Sip per un po 'di tempo, ma non riesco a far funzionare la registrazione . Attualmente mi dà il seguente errore quando chiamo SipManager.register(): android.net.sip.SipException: SipService.createSession() returns null.Android SipManager: android.net.sip.SipException: SipService.createSession() restituisce null

Il mio codice:

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); 
    } 

} 

esecuzione che dà il seguente risultato:

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 

Qualcuno sa che cosa sto facendo male qui? Inoltre, sto provando a registrare manualmente il profilo sip, non utilizzando la registrazione automatica. (secondo la mia prima domanda su stackoverflow, quindi per favore sii gentile :))

+0

stai tentando la registrazione utilizzando la connessione dati mobili ????? prova con wifi –

risposta

4

Aggiornamento: Con questa soluzione l'eccezione era sparita ma non potevo ricevere alcuna chiamata.

Ho appena trovato la soluzione. Devi chiamare aperto prima di chiamare il registro. Inoltre non utilizzare un listener con open (il SipDemo dice così, non so perché) ma registrarlo dopo la registrazione (funziona per me).

Quindi il mio codice è:

manager.open(localProfile, pendingIntent, null); 

manager.register(localProfile, 20, listener); 

manager.setRegistrationListener(localProfile.getUriString(), listener); 
+1

Non ho bisogno di setRegistrationListener e ha funzionato sul mio Nexus 4 su Android 4.4.4 - ma su un Nexus 5 con Android 4.4.4, ottengo ancora SipService.createSession() restituisce null. – Toubey

5

Sembra che ci sia almeno un altro capriccio conseguente lo stesso codice di errore. Se ti capita di avere un account predefinito con lo stesso URI di richiesta sul telefono, il secondo che stai tentando di creare nella tua app fallisce in questo modo. Nota che ciò accade anche se quell'account non è impostato per le chiamate in entrata (= SIP Register nel back-end). Spero che il team di Android risolverà questo errore o almeno fornirà un errore significativo.