title: “How to fix ‘Registration failed. Please check settings’ error in android with sample demo SIP
body: <p>I'm using sample demo of</p>
  
  <p><a href="https://github.com/aosp-mirror/platform_development/tree/master/samples/SipDemo" rel="nofollow noreferrer">https://github.com/aosp-mirror/platform_development/tree/master/samples/SipDemo</a></p>
  
  <p>the programing is ok, it doesn´t show issues, but when I configure this, it shows message Registration failed.</p>
  
  <p>I´m programing with <strong>android studio</strong>, and the server is <strong>asterisk</strong>.
  I tried with <strong>soiper</strong> and  and it works.</p>
  
  <pre><code>public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
  
      public String sipAddress = null;
  
      public SipManager manager = null;
      public SipProfile me = null;
      public SipAudioCall call = null;
      public IncomingCallReceiver callReceiver;
  
      private static final int CALL_ADDRESS = 1;
      private static final int SET_AUTH_INFO = 2;
      private static final int UPDATE_SETTINGS_DIALOG = 3;
      private static final int HANG_UP = 4;
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
  
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_walkie_talkie);
  
          ToggleButton pushToTalkButton = (ToggleButton) findViewById(R.id.pushToTalk);
          pushToTalkButton.setOnTouchListener(this);
  
          // Set up the intent filter.  This will be used to fire an
          // IncomingCallReceiver when someone calls the SIP address used by this
          // application.
          IntentFilter filter = new IntentFilter();
          filter.addAction("android.SipDemo.INCOMING_CALL");
          callReceiver = new IncomingCallReceiver();
          this.registerReceiver(callReceiver, filter);
  
          // "Push to talk" can be a serious pain when the screen keeps turning off.
          // Let's prevent that.
          getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  
          initializeManager();
      }
  
      @Override
      public void onStart() {
          super.onStart();
          // When we get back from the preference setting Activity, assume
          // settings have changed, and re-login with new auth info.
          initializeManager();
      }
  
      @Override
      public void onDestroy() {
          super.onDestroy();
          if (call != null) {
              call.close();
          }
  
          closeLocalProfile();
  
          if (callReceiver != null) {
              this.unregisterReceiver(callReceiver);
          }
      }
  
      public void initializeManager() {
          if(manager == null) {
              manager = SipManager.newInstance(this);
          }
  
          initializeLocalProfile();
      }
  
      /**
       * Logs you into your SIP provider, registering this device as the location to
       * send SIP calls to for your SIP address.
       */
      public void initializeLocalProfile() {
          if (manager == null) {
              return;
          }
  
          if (me != null) {
              closeLocalProfile();
          }
  
          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        /*  String username = prefs.getString("namePref", "");
          String domain = prefs.getString("domainPref", "");
          String password = prefs.getString("passPref", ""); */
  
          String username = "12";
          String domain = "192.168.1.37";
          String password = "1234";
  
          if (username.length() == 0 || domain.length() == 0 || password.length() == 0) {
              showDialog(UPDATE_SETTINGS_DIALOG);
              return;
          }
  
          try {
              SipProfile.Builder builder = new SipProfile.Builder(username, domain);
              builder.setAuthUserName("12");
              builder.setDisplayName("12");
              builder.setProfileName("12");
               builder.setPassword(password);
              me = builder.build();
  
              Intent i = new Intent();
              i.setAction("android.SipDemo.INCOMING_CALL");
              PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
              manager.open(me, pi, null);
  
  
              // This listener must be added AFTER manager.open is called,
              // Otherwise the methods aren't guaranteed to fire.
  
              manager.setRegistrationListener(me.getUriString(), new SipRegistrationListener() {
                  public void onRegistering(String localProfileUri) {
                      updateStatus("Registering with SIP Server...");
                  }
  
                  public void onRegistrationDone(String localProfileUri, long expiryTime) {
                      updateStatus("Ready");
                  }
  
                  public void onRegistrationFailed(String localProfileUri, int errorCode,
                                                   String errorMessage) {
                      updateStatus("Registration failed.  Please check settings.");
                  }
              });
          } catch (ParseException pe) {
              updateStatus("Connection Error.");
          } catch (SipException se) {
              updateStatus("Connection error.");
          }
      }
  /**
   * Closes out your local profile, freeing associated objects into memory
   * and unregistering your device from the server.
   */
  public void closeLocalProfile() {
      if (manager == null) {
          return;
      }
      try {
          if (me != null) {
              manager.close(me.getUriString());
          }
      } catch (Exception ee) {
         // Log.d("WalkieTalkieActivity/onDestroy", "Failed to close local profile.", ee);
      }
  }
  
  /**
   * Make an outgoing call.
   */
  public void initiateCall() {
  
      updateStatus(sipAddress);
  
      try {
          SipAudioCall.Listener listener = new SipAudioCall.Listener() {
              // Much of the client's interaction with the SIP Stack will
              // happen via listeners.  Even making an outgoing call, don't
              // forget to set up a listener to set things up once the call is established.
              @Override
              public void onCallEstablished(SipAudioCall call) {
                  call.startAudio();
                  call.setSpeakerMode(true);
                  call.toggleMute();
                  updateStatus(call);
              }
  
              @Override
              public void onCallEnded(SipAudioCall call) {
                  updateStatus("Ready.");
              }
          };
  
          call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 30);
  
      }
      catch (Exception e) {
         // Log.i("WalkieTalkieActivity/InitiateCall", "Error when trying to close manager.", e);
          if (me != null) {
              try {
                  manager.close(me.getUriString());
              } catch (Exception ee) {
             //     Log.i("WalkieTalkieActivity/InitiateCall",
                //          "Error when trying to close manager.", ee);
                  ee.printStackTrace();
              }
          }
          if (call != null) {
              call.close();
          }
      }
  }
  
  /**
   * Updates the status box at the top of the UI with a messege of your choice.
   * @param status The String to display in the status box.
   */
  public void updateStatus(final String status) {
      // Be a good citizen.  Make sure UI changes fire on the UI thread.
      this.runOnUiThread(new Runnable() {
          public void run() {
              TextView labelView = (TextView) findViewById(R.id.sipLabel);
              labelView.setText(status);
          }
      });
  }
  
  /**
   * Updates the status box with the SIP address of the current call.
   * @param call The current, active call.
   */
  public void updateStatus(SipAudioCall call) {
      String useName = call.getPeerProfile().getDisplayName();
      if(useName == null) {
          useName = call.getPeerProfile().getUserName();
      }
      updateStatus(useName + "@" + call.getPeerProfile().getSipDomain());
  }
  
  /**
   * Updates whether or not the user's voice is muted, depending on whether the button is pressed.
   * @param v The View where the touch event is being fired.
   * @param event The motion to act on.
   * @return boolean Returns false to indicate that the parent view should handle the touch event
   * as it normally would.
   */
  public boolean onTouch(View v, MotionEvent event) {
      if (call == null) {
          return false;
      } else if (event.getAction() == MotionEvent.ACTION_DOWN &amp;&amp; call != null &amp;&amp; call.isMuted()) {
          call.toggleMute();
      } else if (event.getAction() == MotionEvent.ACTION_UP &amp;&amp; !call.isMuted()) {
          call.toggleMute();
      }
      return false;
  }
  
  public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, CALL_ADDRESS, 0, "Call someone");
      menu.add(0, SET_AUTH_INFO, 0, "Edit your SIP Info.");
      menu.add(0, HANG_UP, 0, "End Current Call.");
  
      return true;
  }
  }
  </code></pre>