title: android tcp socket keeps sending
body: <p>MainActivity</p>
  
  <pre><code>public class MainActivity extends FragmentActivity implements ActionBar.OnNavigationListener {
  
  /**
   * The serialization (saved instance state) Bundle key representing the
   * current dropdown position.
   */
  private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
  public final static String EXTRA_MESSAGE = "com.example.deltaskype.MESSAGE";
  
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      // Set up the action bar to show a dropdown list.
      final ActionBar actionBar = getActionBar();
      actionBar.setDisplayShowTitleEnabled(false);
      actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
  
      // Set up the dropdown list navigation in the action bar.
      actionBar.setListNavigationCallbacks(
              // Specify a SpinnerAdapter to populate the dropdown list.
              new ArrayAdapter&lt;String&gt;(
                      actionBar.getThemedContext(),
                      android.R.layout.simple_list_item_1,
                      android.R.id.text1,
                      new String[] {
                              getString(R.string.title_section1),
                              getString(R.string.title_section2),
                              getString(R.string.title_section3),
                      }),
              this);
  }
  
  
  @Override
  public void onRestoreInstanceState(Bundle savedInstanceState) {
      // Restore the previously serialized current dropdown position.
      if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
          getActionBar().setSelectedNavigationItem(
                  savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
      }
  }
  
  @Override
  public void onSaveInstanceState(Bundle outState) {
      // Serialize the current dropdown position.
      outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
              getActionBar().getSelectedNavigationIndex());
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  @Override
  public boolean onNavigationItemSelected(int position, long id) {
      // When the given dropdown item is selected, show its contents in the
      // container view.
      Fragment fragment = new DummySectionFragment();
      Bundle args = new Bundle();
      args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
      fragment.setArguments(args);
      getSupportFragmentManager().beginTransaction()
              .replace(R.id.container, fragment)
              .commit();
      return true;
  }
  
  /**
   * A dummy fragment representing a section of the app, but that simply
   * displays dummy text.
   */
  public static class DummySectionFragment extends Fragment {
      /**
       * The fragment argument representing the section number for this
       * fragment.
       */
      public static final String ARG_SECTION_NUMBER = "section_number";
  
      public DummySectionFragment() {
      }
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
          View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);
          TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
          dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
          return rootView;
      }
  }
  
  
  public void sendMessage(View view) {
      // Do something in response to button
      Intent intent = new Intent(this, DisplayMessageActivity.class);
      EditText editText = (EditText) findViewById(R.id.edit_message);
      String message = editText.getText().toString();
      intent.putExtra(EXTRA_MESSAGE, message);
       startActivity(intent);
  
  
  }
  </code></pre>
  
  <p>DisplayMessageActivity</p>
  
  <pre><code>package com.example.deltaskype;
  
  import java.io.IOException;
  import java.io.OutputStream;
  import java.io.PrintWriter;
  import java.net.Socket;
  import java.net.UnknownHostException;
  
  import android.os.Build;
  import android.os.Bundle;
  import android.os.StrictMode;
  import android.annotation.SuppressLint;
  import android.app.Activity;
  import android.content.Intent;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.widget.TextView;
  import android.support.v4.app.NavUtils;
  
  public class DisplayMessageActivity extends Activity {
  
      @SuppressLint("NewApi")
      @Override
      public void onCreate(Bundle savedInstanceState) {
  
           if (android.os.Build.VERSION.SDK_INT &gt; 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
              }
  
          super.onCreate(savedInstanceState);
  
          // Get the message from the intent
          Intent intent = getIntent();
          String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
  
          // Create the text view
          TextView textView = new TextView(this);
          textView.setTextSize(40);
          textView.setText(message);
  
          // Set the text view as the activity layout
          setContentView(textView);
          Socket socket = null;
          try {
              socket = new Socket("X.X.X.X", 13134);
          } catch (UnknownHostException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }   
  
           OutputStream out = null;
              try {
                  out = socket.getOutputStream();
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }       
              PrintWriter output = new PrintWriter(out);         
  
  
              output.println("&lt;request&gt;&lt;auth&gt;&lt;user&gt;X&lt;/user&gt;&lt;password&gt;X&lt;/password&gt;&lt;/auth&gt;&lt;action&gt;&lt;name&gt;makeCall&lt;/name&gt;&lt;data&gt;&lt;dialnum&gt;"+message+"&lt;/dialnum&gt;&lt;/data&gt;&lt;/action&gt;&lt;/request&gt;\n");              
              output.flush();
              output.close();
              try {
                  socket.close();
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }                                    
  
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
          case android.R.id.home:
              NavUtils.navigateUpFromSameTask(this);
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  }
  </code></pre>
  
  <p>This is used to call to a deskphone, but it executes the call multiple times, </p>
  
  <p>A response of OK is given if the call is made for the first time, any ideas why it makes a call multiple times (i.e. pick up the call and put it down and it rings again!)</p>