Make Bluetooth Connectedness Betwixt Android Devices

Posted on

The previous post service present how to List paired BlueTooth devices. Here I present how to brand connectedness betwixt Android devices amongst Bluetooth.

In club to arrive simple, I assort its functionality inward 2 app:

  • AndroidBlueToothBeCOnnected:
    It outset a BluetoothServerSocket yesteryear calling bluetoothAdapter.listenUsingRfcommWithServiceRecord().
    Then expect for connectedness with accept().
  • AndroidBlueTooth:
    It search for paired bluetooth devices, too asking connect.


This event present making connectedness only, zero else tin do.


AndroidBlueToothBeCOnnected:

MainActivity.java

package com.example.androidbluetoothbeconnected;  import java.io.IOException; import java.util.UUID;  import android.support.v7.app.ActionBarActivity; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast;  populace shape MainActivity extends ActionBarActivity {    person static concluding int REQUEST_ENABLE_BT = 1;    BluetoothAdapter bluetoothAdapter;    person UUID myUUID;  person String myName;   TextView textInfo, textStatus;    ThreadBeConnected myThreadBeConnected;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   textInfo = (TextView)findViewById(R.id.info);   textStatus = (TextView)findViewById(R.id.status);      if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)){    Toast.makeText(this,      "FEATURE_BLUETOOTH NOT support",      Toast.LENGTH_LONG).show();             finish();             return;   }    //generate UUID on web: http://www.famkruithof.net/uuid/uuidgen   //have to check the UUID on the closed to other device of the BT connectedness   myUUID = UUID.fromString("ec79da00-853f-11e4-b4a9-0800200c9a66");   myName = myUUID.toString();      bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();   if (bluetoothAdapter == null) {    Toast.makeText(this,      "Bluetooth is non supported on this hardware platform",      Toast.LENGTH_LONG).show();             finish();             return;   }      String stInfo = bluetoothAdapter.getName() + "\n" +       bluetoothAdapter.getAddress();   textInfo.setText(stInfo);  }    @Override  protected void onStart() {   super.onStart();      //Turn ON BlueTooth if it is OFF   if (!bluetoothAdapter.isEnabled()) {             Intent enableIntent = novel Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);             startActivityForResult(enableIntent, REQUEST_ENABLE_BT);         }      setup();  }    person void setup() {   textStatus.setText("setup()");   myThreadBeConnected = novel ThreadBeConnected();   myThreadBeConnected.start();  }    @Override  protected void onDestroy() {   super.onDestroy();      if(myThreadBeConnected!=null){    myThreadBeConnected.cancel();   }  }   @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {      if(requestCode==REQUEST_ENABLE_BT){    if(resultCode == Activity.RESULT_OK){     setup();    }else{     Toast.makeText(this,       "BlueTooth NOT enabled",       Toast.LENGTH_SHORT).show();              finish();    }   }   }    person shape ThreadBeConnected extends Thread {      person BluetoothServerSocket bluetoothServerSocket = null;      populace ThreadBeConnected() {    drive {     bluetoothServerSocket =        bluetoothAdapter.listenUsingRfcommWithServiceRecord(myName, myUUID);          textStatus.setText("Waiting\n"       + "bluetoothServerSocket :\n"      + bluetoothServerSocket);    } grab (IOException e) {     // TODO Auto-generated grab block     e.printStackTrace();    }   }    @Override   populace void run() {    BluetoothSocket bluetoothSocket = null;        if(bluetoothServerSocket!=null){     drive {      bluetoothSocket = bluetoothServerSocket.accept();            BluetoothDevice remoteDevice = bluetoothSocket.getRemoteDevice();            concluding String strConnected = "Connected:\n" +        remoteDevice.getName() + "\n" +        remoteDevice.getAddress();            //connected      runOnUiThread(new Runnable(){        @Override       populace void run() {        textStatus.setText(strConnected);       }});           } grab (IOException e) {      // TODO Auto-generated grab block      e.printStackTrace();            concluding String eMessage = e.getMessage();      runOnUiThread(new Runnable(){        @Override       populace void run() {        textStatus.setText("something wrong: \n" + eMessage);       }});     }    }else{     runOnUiThread(new Runnable(){       @Override      populace void run() {       textStatus.setText("bluetoothServerSocket == null");      }});    }   }      populace void cancel() {        Toast.makeText(getApplicationContext(),      "close bluetoothServerSocket",      Toast.LENGTH_LONG).show();        drive {     bluetoothServerSocket.close();    } grab (IOException e) {     // TODO Auto-generated grab block     e.printStackTrace();    }         }  } } 

/res/layout/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     android:orientation="vertical"     tools:context="com.example.androidbluetoothbeconnected.MainActivity" >      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_horizontal"         android:autoLink="web"         android:text="https://rootandroid.org//"         android:textStyle="bold" />          <TextView         android:id="@+id/info"         android:textStyle="bold|italic"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/>     <TextView         android:id="@+id/status"         android:textSize="28sp"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/>  </LinearLayout> 

Modify AndroidManifest.xml to add together permission of “android.permission.BLUETOOTH”.

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.androidbluetoothbeconnected"     android:versionCode="1"     android:versionName="1.0" >      <uses-sdk         android:minSdkVersion="8"         android:targetSdkVersion="21" />     <uses-permission android:name="android.permission.BLUETOOTH"/>      <application         android:allowBackup="true"         android:icon="@drawable/ic_launcher"         android:label="@string/app_name"         android:theme="@style/AppTheme" >         <activity             android:name=".MainActivity"             android:label="@string/app_name" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>     </application>  </manifest> 

 Here I present how to brand connectedness betwixt Android devices amongst Bluetooth Make BlueTooth connectedness betwixt Android devicesDownload the files.


AndroidBlueTooth:

MainActivity.java

package com.example.androidbluetooth;  import java.io.IOException; import java.util.ArrayList; import java.util.Set; import java.util.UUID;  import android.support.v7.app.ActionBarActivity; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;  populace shape MainActivity extends ActionBarActivity {    person static concluding int REQUEST_ENABLE_BT = 1;    BluetoothAdapter bluetoothAdapter;    ArrayList<BluetoothDevice> pairedDeviceArrayList;    TextView textInfo, textStatus;  ListView listViewPairedDevice;  ArrayAdapter<BluetoothDevice> pairedDeviceAdapter;  person UUID myUUID;    ThreadConnectBTdevice myThreadConnectBTdevice;   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   textInfo = (TextView)findViewById(R.id.info);   textStatus = (TextView)findViewById(R.id.status);   listViewPairedDevice = (ListView)findViewById(R.id.pairedlist);      if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)){    Toast.makeText(this,      "FEATURE_BLUETOOTH NOT support",      Toast.LENGTH_LONG).show();             finish();             return;   }    //generate UUID on web: http://www.famkruithof.net/uuid/uuidgen   //have to check the UUID on the closed to other device of the BT connectedness   myUUID = UUID.fromString("ec79da00-853f-11e4-b4a9-0800200c9a66");      bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();   if (bluetoothAdapter == null) {    Toast.makeText(this,      "Bluetooth is non supported on this hardware platform",      Toast.LENGTH_LONG).show();             finish();             return;   }      String stInfo = bluetoothAdapter.getName() + "\n" +     bluetoothAdapter.getAddress();   textInfo.setText(stInfo);  }   @Override  protected void onStart() {   super.onStart();      //Turn ON BlueTooth if it is OFF   if (!bluetoothAdapter.isEnabled()) {             Intent enableIntent = novel Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);             startActivityForResult(enableIntent, REQUEST_ENABLE_BT);         }      setup();  }    person void setup() {   Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();   if (pairedDevices.size() > 0) {    pairedDeviceArrayList = novel ArrayList<BluetoothDevice>();        for (BluetoothDevice device : pairedDevices) {     pairedDeviceArrayList.add(device);             }        pairedDeviceAdapter = novel ArrayAdapter<BluetoothDevice>(this,                  android.R.layout.simple_list_item_1, pairedDeviceArrayList);    listViewPairedDevice.setAdapter(pairedDeviceAdapter);        listViewPairedDevice.setOnItemClickListener(new OnItemClickListener(){      @Override     populace void onItemClick(AdapterView<?> parent, View view,       int position, long id) {      BluetoothDevice device =         (BluetoothDevice)parent.getItemAtPosition(position);       Toast.makeText(MainActivity.this,         "Name: " + device.getName() + "\n"        + "Address: " + device.getAddress() + "\n"        + "BondState: " + device.getBondState() + "\n"        + "BluetoothClass: " + device.getBluetoothClass() + "\n"        + "Class: " + device.getClass(),        Toast.LENGTH_LONG).show();              textStatus.setText("start ThreadConnectBTdevice");       myThreadConnectBTdevice = novel ThreadConnectBTdevice(device);       myThreadConnectBTdevice.start();     }});   }  }       @Override  protected void onDestroy() {   super.onDestroy();      if(myThreadConnectBTdevice!=null){    myThreadConnectBTdevice.cancel();   }  }   @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {      if(requestCode==REQUEST_ENABLE_BT){    if(resultCode == Activity.RESULT_OK){     setup();    }else{     Toast.makeText(this,       "BlueTooth NOT enabled",       Toast.LENGTH_SHORT).show();              finish();    }   }   }    person shape ThreadConnectBTdevice extends Thread {   person BluetoothSocket bluetoothSocket = null;         person concluding BluetoothDevice bluetoothDevice;                           populace ThreadConnectBTdevice(BluetoothDevice device) {          bluetoothDevice = device;           drive {     bluetoothSocket = device.createRfcommSocketToServiceRecord(myUUID);     textStatus.setText("bluetoothSocket: \n" + bluetoothSocket);    } grab (IOException e) {     // TODO Auto-generated grab block     e.printStackTrace();    }         }    @Override   populace void run() {    boolean success = false;    drive {     bluetoothSocket.connect();     success = true;    } grab (IOException e) {     e.printStackTrace();          concluding String eMessage = e.getMessage();     runOnUiThread(new Runnable(){       @Override      populace void run() {       textStatus.setText("something incorrect bluetoothSocket.connect(): \n" + eMessage);      }});          drive {      bluetoothSocket.close();     } grab (IOException e1) {      // TODO Auto-generated grab block      e1.printStackTrace();     }    }        if(success){     //connect successful     runOnUiThread(new Runnable(){       @Override      populace void run() {       textStatus.setText("connect successful");      }});    }else{     //fail    }   }      populace void cancel() {        Toast.makeText(getApplicationContext(),       "close bluetoothSocket",       Toast.LENGTH_LONG).show();        drive {     bluetoothSocket.close();    } grab (IOException e) {     // TODO Auto-generated grab block     e.printStackTrace();    }             }  }   } 

/res/layout/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     android:orientation="vertical"     tools:context="com.example.androidbluetooth.MainActivity" >      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_horizontal"         android:autoLink="web"         android:text="https://rootandroid.org//"         android:textStyle="bold" />          <TextView         android:id="@+id/info"         android:textStyle="bold|italic"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/>     <TextView         android:id="@+id/status"         android:textSize="28sp"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/>          <ListView          android:id="@+id/pairedlist"         android:layout_width="match_parent"         android:layout_height="match_parent"/>  </LinearLayout> 

AndroidManifest.xml amongst permission of “android.permission.BLUETOOTH”

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.androidbluetooth"     android:versionCode="1"     android:versionName="1.0" >      <uses-sdk         android:minSdkVersion="8"         android:targetSdkVersion="21" />     <uses-permission android:name="android.permission.BLUETOOTH"/>      <application         android:allowBackup="true"         android:icon="@drawable/ic_launcher"         android:label="@string/app_name"         android:theme="@style/AppTheme" >         <activity             android:name=".MainActivity"             android:label="@string/app_name" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>     </application>  </manifest> 

 Here I present how to brand connectedness betwixt Android devices amongst Bluetooth Make BlueTooth connectedness betwixt Android devicesDownload the files.

Next:
– Bluetooth communication betwixt Android devices