2013-08-11 25 views
7

Vì vậy, tôi đã mã hóa ứng dụng Android Sip này bằng cách sử dụng thư viện Android Sip một thời gian, nhưng tôi không thể đăng ký làm việc . Hiện tại, nó cho tôi lỗi sau khi tôi gọi SipManager.register(): android.net.sip.SipException: SipService.createSession() returns null.Android SipManager: android.net.sip.SipException: SipService.createSession() trả về null

Mã của tôi:

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

} 

Chạy cung cấp cho đầu ra sau đây:

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 

Có ai biết những gì tôi đang làm sai ở đây? Ngoài ra, tôi đang cố gắng đăng ký hồ sơ sip theo cách thủ công, không phải bằng cách sử dụng tính năng tự động phân phối. (btw câu hỏi đầu tiên của tôi trên stackoverflow, vì vậy hãy nhẹ nhàng :))

+0

bạn đang cố đăng ký sử dụng kết nối dữ liệu di động ????? thử với wifi –

Trả lời

4

Cập nhật: Với giải pháp ngoại lệ đã biến mất nhưng tôi không thể nhận được bất kỳ cuộc gọi nào.

Tôi vừa tìm ra giải pháp. Bạn phải gọi mở trước khi bạn gọi đăng ký. Ngoài ra không sử dụng một người nghe với mở (SipDemo nói như vậy, không chắc chắn lý do tại sao) nhưng đăng ký nó sau khi đăng ký (làm việc cho tôi).

Vì vậy, mã của tôi là:

manager.open(localProfile, pendingIntent, null); 

manager.register(localProfile, 20, listener); 

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

Tôi không cần setRegistrationListener và nó hoạt động trên Nexus 4 của tôi trên Android 4.4.4 - nhưng trên Nexus 5 cũng chạy Android 4.4.4, tôi vẫn nhận được SipService.createSession() trả về null. – Toubey

5

Dường như có ít nhất một điều không minh bạch dẫn đến các mã lỗi tương tự. Nếu bạn có một tài khoản được xác định trước với cùng một URI yêu cầu trên điện thoại của bạn, thì tài khoản thứ hai mà bạn đang cố gắng tạo trong ứng dụng của bạn không thành công theo cách này. Lưu ý rằng điều này xảy ra ngay cả khi tài khoản đó không được đặt cho các cuộc gọi đến (= SIP Register trong phần phụ trợ). Tôi hy vọng nhóm Android sẽ sửa lỗi này hoặc ít nhất là ném một lỗi có ý nghĩa.