2013-08-11 10 views
7

Also, ich habe diese Android Sip-Anwendung mit Android Sip-Bibliothek für einige Zeit, aber ich kann nicht die Registrierung zu arbeiten . Derzeit gibt es den folgenden Fehler, wenn ich SipManager.register(): android.net.sip.SipException: SipService.createSession() returns null aufrufen.Android SipManager: android.net.sip.SipException: SipService.createSession() gibt null

Mein Code:

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

} 

Lauf, die die folgende Ausgabe gibt:

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 

Weiß jemand, was ich falsch hier tue? Außerdem versuche ich, das SIP-Profil manuell zu registrieren, nicht durch Autoregistrierung. (btw meine erste Frage auf stackoverflow, also bitte sei sanft :))

+0

versuchen Sie Registrierung über mobile Datenverbindung ????? versuche mit wifi –

Antwort

4

Update: Mit dieser Lösung war die Ausnahme verschwunden, aber ich konnte keine Anrufe erhalten.

Ich habe gerade die Lösung gefunden. Sie müssen offen anrufen, bevor Sie sich anmelden. Verwenden Sie auch keinen Listener mit geöffnet (der SipDemo sagt so, nicht sicher, warum), aber registrieren Sie es nach der Registrierung (funktioniert für mich).

So ist mein Code:

manager.open(localProfile, pendingIntent, null); 

manager.register(localProfile, 20, listener); 

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

Ich brauchte setRegistrationListener nicht und es funktionierte auf meinem Nexus 4 auf Android 4.4.4 - aber auf einem Nexus 5 auch mit Android 4.4.4, bekomme ich immer noch SipService.createSession() gibt null zurück. – Toubey

5

Es scheint in der gleichen Fehlercode resultierende zumindest eine andere Marotte zu sein. Wenn Sie ein vordefiniertes Konto mit derselben Anforderungs-URI auf Ihrem Telefon haben, schlägt die zweite, die Sie in Ihrer App erstellen möchten, auf diese Weise fehl. Beachten Sie, dass dies auch dann geschieht, wenn dieses Konto nicht für eingehende Anrufe eingerichtet ist (= SIP-Register im Backend). Ich hoffe, dass das Android-Team diesen Fehler beheben oder zumindest einen sinnvollen Fehler auslösen wird.