title: Message and File Transfer using Bluetooth in android
body: <p>I am developing an application in which first we have to search and connect available paired Bluetooth devices. I have done till connection. But after that I have put one screen which asks to choose between Text and file transfer. When I select text then one more screen will open in which there are edittext and button. Whatever user types in edittext and clicks on button that should be transferd to connected BT device like BT chat application. I have gone through BT chat app but it is complex to understand. I want a seperate function which does transferring task. Below is my connection code.</p>
  
  <p>Main.java</p>
  
  <pre><code>public class Main extends Activity implements Runnable 
  {
      protected static final String TAG = "TAG";
      private static final int REQUEST_CONNECT_DEVICE = 1;
      private static final int REQUEST_ENABLE_BT = 2;
      Button mScan;
      BluetoothAdapter mBluetoothAdapter;
      private UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
      private ProgressDialog mBluetoothConnectProgressDialog;
      private BluetoothSocket mBluetoothSocket;
      BluetoothDevice mBluetoothDevice;
  
      @Override
      public void onCreate(Bundle mSavedInstanceState) 
      {
          super.onCreate(mSavedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
          setContentView(R.layout.main);
          mScan = (Button) findViewById(R.id.Scan);
          mScan.setOnClickListener(new View.OnClickListener() 
          {
              public void onClick(View mView) 
              {
                  mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                  if (mBluetoothAdapter == null) 
                  {
                      Toast.makeText(Main.this, "Message1", 2000).show();
                  } 
                  else 
                  {
                      if (!mBluetoothAdapter.isEnabled()) 
                      {
                          Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                          startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                      } 
                      else 
                      {
                          ListPairedDevices();
                          Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                          startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                      }
                  }
              }
          });
  
      }
  
      public void onActivityResult(int mRequestCode, int mResultCode, Intent mDataIntent) 
      {
          super.onActivityResult(mRequestCode, mResultCode, mDataIntent);
  
          switch (mRequestCode) 
          {
              case REQUEST_CONNECT_DEVICE:
                  if (mResultCode == Activity.RESULT_OK) 
                  {
                      Bundle mExtra = mDataIntent.getExtras();
                      String mDeviceAddress = mExtra.getString("DeviceAddress");
                      Log.v(TAG, "Coming incoming address " + mDeviceAddress);
                      mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
                      mBluetoothConnectProgressDialog = ProgressDialog.show(this, "Connecting...", mBluetoothDevice.getName() + " : " + mBluetoothDevice.getAddress(), true, false);
                      Thread mBlutoothConnectThread = new Thread(this);
                      mBlutoothConnectThread.start();
                      //pairToDevice(mBluetoothDevice); This method is replaced by progress dialog with thread
                  }
                  break;
  
              case REQUEST_ENABLE_BT:
                  if (mResultCode == Activity.RESULT_OK) 
                  {
                      ListPairedDevices();
                      Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                      startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                  } 
                  else 
                  {
                      Toast.makeText(Main.this, "Message", 2000).show();
                  }
                  break;
          }
      }
  
      private void ListPairedDevices() 
      {
          Set&lt;BluetoothDevice&gt; mPairedDevices = mBluetoothAdapter.getBondedDevices();
          if (mPairedDevices.size() &gt; 0) 
          {
              for (BluetoothDevice mDevice : mPairedDevices) 
              {
                  Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " + mDevice.getAddress());
              }
          }
      }
  
      public void run() 
      {
          try 
          {
              mBluetoothSocket = mBluetoothDevice.createRfcommSocketToServiceRecord(applicationUUID);
              mBluetoothAdapter.cancelDiscovery();
              mBluetoothSocket.connect();
              mHandler.sendEmptyMessage(0);
          }
          catch (IOException eConnectException) 
          {
              Log.d(TAG, "CouldNotConnectToSocket", eConnectException);
               closeSocket(mBluetoothSocket);
               return;
          }
      }
  
      private void closeSocket(BluetoothSocket nOpenSocket) 
      {
          try 
          {
              nOpenSocket.close();
              Log.d(TAG, "SocketClosed");
          } 
          catch (IOException ex) 
          {
              Log.d(TAG, "CouldNotCloseSocket");
          }
      }
  
      private Handler mHandler = new Handler() 
      {
          @Override
          public void handleMessage(Message msg) 
          {
              mBluetoothConnectProgressDialog.dismiss();
              Toast.makeText(Main.this, "Device Connected", 5000).show();
  
              Intent in = new Intent(getBaseContext(), Option.class);
              startActivity(in);
  
          }
      };
  }
  </code></pre>
  
  <p>DeviceListActivity.java</p>
  
  <pre><code>public class DeviceListActivity extends Activity 
  {
      protected static final String TAG = "TAG";
      private BluetoothAdapter mBluetoothAdapter;
      private ArrayAdapter&lt;String&gt; mPairedDevicesArrayAdapter;
  
      @Override
      protected void onCreate(Bundle mSavedInstanceState) 
      {
          super.onCreate(mSavedInstanceState);
          requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
          setContentView(R.layout.device_list);
  
          setResult(Activity.RESULT_CANCELED);
          mPairedDevicesArrayAdapter = new ArrayAdapter&lt;String&gt;(this, R.layout.device_name);
  
          ListView mPairedListView = (ListView) findViewById(R.id.paired_devices);
          mPairedListView.setAdapter(mPairedDevicesArrayAdapter);
          mPairedListView.setOnItemClickListener(mDeviceClickListener);
  
          mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
          Set&lt;BluetoothDevice&gt; mPairedDevices = mBluetoothAdapter.getBondedDevices();
  
          if (mPairedDevices.size() &gt; 0) 
          {
              findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
              for (BluetoothDevice mDevice : mPairedDevices) 
              {
                  mPairedDevicesArrayAdapter.add(mDevice.getName() + "\n" + mDevice.getAddress());
              }
          } 
          else 
          {
              String mNoDevices = getResources().getText(R.string.none_paired).toString();
              mPairedDevicesArrayAdapter.add(mNoDevices);
          }
      }
  
      @Override
      protected void onDestroy() 
      {
          super.onDestroy();
          if (mBluetoothAdapter != null) 
          {
              mBluetoothAdapter.cancelDiscovery();
          }
      }
  
      private OnItemClickListener mDeviceClickListener = new OnItemClickListener() 
      {
          public void onItemClick(AdapterView&lt;?&gt; mAdapterView, View mView, int mPosition, long mLong) 
          {
              mBluetoothAdapter.cancelDiscovery();
              String mDeviceInfo = ((TextView) mView).getText().toString();
              String mDeviceAddress = mDeviceInfo.substring(mDeviceInfo.length() - 17);
              Log.v(TAG, "Device_Address " + mDeviceAddress);
  
              Bundle mBundle = new Bundle();
              mBundle.putString("DeviceAddress", mDeviceAddress);
              Intent mBackIntent = new Intent();
              mBackIntent.putExtras(mBundle);
              setResult(Activity.RESULT_OK, mBackIntent);
              finish();
          }
      };
  
  }
  </code></pre>
  
  <p>option.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" &gt;
  
      &lt;Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/file" /&gt;
  
      &lt;Button
          android:id="@+id/button2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/txt" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>message.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" &gt;
  
      &lt;EditText
          android:id="@+id/editText1"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:ems="10" 
          android:hint="@string/hint"&gt;
  
          &lt;requestFocus /&gt;
      &lt;/EditText&gt;
  
      &lt;Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/send" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>