2017-03-06 4 views
0

Je suis les directives de Google pour créer des appels SIP dans l'application comme dans https://developer.android.com/guide/topics/connectivity/sip.html J'ai créé un compte de test sur sip.zadarma.com qui fonctionne avec un client SIP que j'ai téléchargé sur Google Play cependant quand j'essaye pour l'enregistrer dans mon application, je reçois: onRegistrationFailed errorCode = -4 errorMessage: l'enregistrement ne fonctionne pas onRegistrationFailed errorCode = -9 errorMessage: 0L'inscription d'Android SipManager a échoué

@Override 
protected void onResume() { 
    super.onResume(); 

    if (mNumberKeyedIn == null) 
     mNumberKeyedIn = ""; 
    if (hasSIPPermissions()) { 
     initializeSIP(); 
    } else { 
     requestSIPPermission(); 
    } 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    closeLocalProfile(); 
} 

public void closeLocalProfile() { 
    if (mSipManager == null) { 
     return; 
    } 

    try { 
     if (mSipProfile != null) { 
      mSipManager.close(mSipProfile.getUriString()); 
      if (mSipManager.isRegistered(mSipProfile.getProfileName())) 
       mSipManager.unregister(mSipProfile, null); 
     } 
    } catch (Exception e) { 
     Log.d(TAG, "Failed to close local profile.", e); 
    } 
} 

private void initializeSIP() { 

    if (callReceiver == null) { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("com.xxxx.android.apps.xxxx.activity.INCOMING_CALL"); 
     callReceiver = new IncomingCallReceiver(); 
     this.registerReceiver(callReceiver, filter); 
    } 

    try { 
     if (mSipManager == null) { 
      mSipManager = SipManager.newInstance(this); 
      if (!SipManager.isVoipSupported(this)) { 
       Toast.makeText(this, getString(R.string.sip_not_supported), Toast.LENGTH_SHORT).show(); 
       return; 
      } 
      if (SipManager.isSipWifiOnly(this)) { 
       Toast.makeText(this, getString(R.string.sip_wifi_only), Toast.LENGTH_SHORT).show(); 
      } 
     } 

     if (mSipProfile != null) { 
      closeLocalProfile(); 
     } 

     SipProfile.Builder builder = new SipProfile.Builder(BuildConfig.SIP_USERNAME, BuildConfig.SIP_DOMAIN); 
     builder.setPassword(BuildConfig.SIP_PASSWORD); 
     //builder.setProtocol("TCP"); 
     //builder.setAuthUserName(BuildConfig.SIP_USERNAME); 
     //builder.setPort(5060); 
     //builder.setOutboundProxy(BuildConfig.SIP_OUTBOUND_PROXY); 
     builder.setAutoRegistration(true); 
     mSipProfile = builder.build(); 

     Intent intent = new Intent(); 
     intent.setAction("com.xxxx.android.apps.xxxx.activity.INCOMING_CALL"); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); 
     mSipManager.open(mSipProfile, pendingIntent, null); 
     mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() { 

      public void onRegistering(String localProfileUri) { 
       updateStatus(getString(R.string.sip_registering), R.drawable.circle_orange, false); 
       Log.d(TAG, "onRegistering " + localProfileUri); 
      } 

      public void onRegistrationDone(String localProfileUri, long expiryTime) { 
       updateStatus(getString(R.string.sip_ready), R.drawable.circle_green, true); 
       Log.d(TAG, "onRegistrationDone " + localProfileUri + " expiryTime = " + expiryTime); 
      } 

      public void onRegistrationFailed(String localProfileUri, int errorCode, 
              String errorMessage) { 
       updateStatus(getString(R.string.sip_registration_failed), R.drawable.circle_red, false); 
       Log.e(TAG, "onRegistrationFailed " + localProfileUri + " errorCode = " + errorCode + " errorMessage: " + errorMessage); 
      } 
     }); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     Toast.makeText(this, getString(R.string.sip_not_configured), Toast.LENGTH_SHORT).show(); 
    } catch (SipException e) { 
     e.printStackTrace(); 
     Toast.makeText(this, getString(R.string.oops_something_went_wrong_short), Toast.LENGTH_SHORT).show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Toast.makeText(this, getString(R.string.sip_not_supported), Toast.LENGTH_SHORT).show(); 
    } 
} 

Toute aide sera très appréciée.

Répondre

0

Les solutions suivantes doivent être essayées avant de tester votre serveur d'enregistrement avant même d'examiner le code de SipClient. Essayez de lancer un client VoIP SoftPhone pour vérifier votre serveur, si cela ne fonctionne pas, puis déboguez ce premier problème d'adresse IP/PortNo.

  • Si la première étape fonctionne, essayez d'exécuter Wireshark sur le serveur pour suivre la réponse de la demande d'inscription entrante du client. Bien que le message "Error logs" de votre texte signifie que l'adresse IP est pingable, mais que le numéro de port d'enregistrement n'est pas ouvert.

    Je ne pense pas que ce soit un problème de code. Cela doit être votre problème d'installation à coup sûr.