2016-08-26 2 views
0

안녕하세요 저는 아래 코드와 함께 전화를 걸고 응답하는 응용 프로그램을 개발하고자합니다. "SipManager가 닫혔습니다."및 토스트가 "등록되지 않았습니다".SIP 등록 - Android Studio

아무런 예외가 없으며 "setRegistrationListener"의 토스트가 실행되지 않았습니다.

무엇이 잘못 되었나요? 문제가 무엇입니까?

private void inicializarPerfilLocal(){ 
     if(mSipManager == null){ 
      Toast.makeText(getApplicationContext(), "Error al iniciar administrador SIP", Toast.LENGTH_LONG); 
      return; 
     } 
    String username = COUNTRYCODE+PHONE_NUMBER; 
    String domain = "xx.yy.zz"; 
    String password = "ABCABCABC"; 

    try{ 
     SipProfile.Builder builder = new SipProfile.Builder(username, domain); 
     builder.setPassword(password); 
     builder.setAuthUserName(username+"@"+domain); 
     builder.setOutboundProxy("255.255.255.0"); 
     builder.setProfileName(username + "@" + domain); 
     builder.setDisplayName("Test"); 
     builder.setProtocol("TCP"); 
     builder.setAutoRegistration(true); 

     mSipProfile = builder.build(); 

     Intent i = new Intent(); 
     i.setAction("android.SipDemo.INCOMING_CALL"); 
     PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA); 
     mSipManager.open(mSipProfile, pi, null); 

     if (mSipManager.isOpened(mSipProfile.getUriString())){ 
      Toast.makeText(getApplicationContext(), "Administrador abierto", Toast.LENGTH_LONG).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Administrador cerrado", Toast.LENGTH_LONG).show(); 
     } 

     mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() { 
      public void onRegistering(String localProfileUri) { 
       Toast.makeText(getApplicationContext(), "Registrando...", 
         Toast.LENGTH_LONG).show(); 
      } 

      public void onRegistrationDone(String localProfileUri, long expiryTime) { 
       Toast.makeText(getApplicationContext(), "Registrado", 
         Toast.LENGTH_LONG).show(); 
      } 

      public void onRegistrationFailed(String localProfileUri, int errorCode, 
              String errorMessage) { 
       Toast.makeText(getApplicationContext(), "Error en registro errorCode :: "+errorMessage, 
         Toast.LENGTH_LONG).show(); 

      } 
     }); 

     if (mSipManager.isRegistered(mSipProfile.getUriString())){ 
      Toast.makeText(getApplicationContext(), "Registrado", Toast.LENGTH_LONG).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "No registrado", Toast.LENGTH_LONG).show(); 
     } 
    }catch(ParseException pe){ 
     Toast.makeText(getApplicationContext(), "Excepcion de parseo", Toast.LENGTH_LONG).show(); 
    }catch(SipException se){ 
     Toast.makeText(getApplicationContext(), "Excepcion SIP", Toast.LENGTH_LONG); 
    } 
} 

답변

0

확인하시기 바랍니다 다음 사항 1. 네트워크 conectivity 더는 openend하는 즉, IP 및 포트를 잘하지 않습니다. 이를 확인하려면 소프트 폰을 설치하고 등록하십시오.

  1. 코드에서 나는 SIP 레지스터에 대한 프로토콜로 TCP를 사용하고있는 것을 볼 수 있습니다. 정상적으로 포트 5060이 UDP 용으로 열려 있는지 확인하십시오 다음은 생각해야 할 코드입니다. builder.setProtocol ("TCP");
+0

안녕 Ravi! 귀하의 권고에 대해 CSIPSimple로 서비스를 구성하고 작동하기 때문에 IP와 포트가 열립니다. 두 번째 추천에 대해서는 "UDP"로 바뀌었고 이제는 "SipManager가 열려 있습니다"하지만 등록되지 않았습니다. 로그에 "-9"(RegistrationFailed -9 :: 0) 및 "-4"(RegistrationFailed -4 :: 등록 실행되지 않음) 오류가 표시됩니다. –

+0

tcpdump를 통해 로그를 확인하고 tcpdump에서 어떤 종류의 오류가 발생했는지 확인하십시오. 다행스럽게도 CSIPSimple은 모든 종류의 헤더를 허용하지만 앱은 그렇지 않습니다. – Ravi