Monday 14 April 2014

Buetooth

Bluetooth:

      Bluetooth connectivity is a common way to share data from one device to another.Normally Bluetooth is used to share Media files like mp3 songs images or videos or files. 

Bluetooth Device Class:

       Bluetooth class, which describes general characteristics and capabilities of a device. For example, Generally when we connect to a Bluetooth Device like Computer, Laptop, Bluetooth Headset and Bluetooth other peripherals.And the Bluetooth class will specify the general device type such as a phone, a computer, or headset, and whether it's capable of services such as audio or telephony.

And today I am adding an other basic tutorial to get List of Paired Bluetooth Devices and get the Major Class (Headset, Computer or other Peripheral) of the Paired Bluetooth Devices:

OutPut:
onlaunchCheckbluetoothafter enabling bluetooth

paired devices list
Create new Android Project
Project Name: BlueToothPairing
//tested from 2.3.3 to current android sdk 
Build Target: Android 2.3.3   //or greater than that
Application Name: BlueToothPairing
Package Name: com.shaikhhamadali.blogspot.bluetoothpairing
Create Layout file: activity_pair

1. code of Layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/Main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     >
<TextView 
    android:id="@+id/tVBluetoothState" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<Button
    android:id="@+id/btnListPairedDevices" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:text="List Paired Devices" 
    android:enabled="false"
    /> 
</LinearLayout>


2. code of activityies:

   PairingActivity:

package com.shaikhhamadali.blogspot.bluetoothpairing;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class PairingActivity extends Activity {
 //Create variables
 private static final int REQUEST_ENABLE_BT = 1;
 private static final int REQUEST_PAIRED_DEVICE = 2;

 //declare views/controls
 Button btnListPairedDevices;
 TextView tVBluetoothState;

 //declare Bluetooth Adapter
 BluetoothAdapter btAdapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_pair);
  //get reference of the UI Controls
  btnListPairedDevices = (Button)findViewById(R.id.btnListPairedDevices);
  tVBluetoothState = (TextView)findViewById(R.id.tVBluetoothState);
  //Get Default bluetooth adapter
  btAdapter = BluetoothAdapter.getDefaultAdapter();
  //Check the state of bluetooth
  CheckBlueToothState();
  //set listner for the button.
  btnListPairedDevices.setOnClickListener(btnListPairedDevicesOnClickListener);
 }

 private void CheckBlueToothState(){
  //does device support Bluetooth 
  if (btAdapter == null){
   tVBluetoothState.setText("Bluetooth NOT support");
  }else{
   //is Bluetooth enable
   if (btAdapter.isEnabled()){
    //is in discovery mode
    if(btAdapter.isDiscovering()){
     tVBluetoothState.setText("Bluetooth is currently in device discovery process.");
    }else{
     tVBluetoothState.setText("Bluetooth is Enabled.");
     btnListPairedDevices.setEnabled(true);
    }
   }else{
    tVBluetoothState.setText("Bluetooth is NOT Enabled!");
    //Enable Bluetooth by intent 
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
   }
  }
 }

 private Button.OnClickListener btnListPairedDevicesOnClickListener= new Button.OnClickListener(){

  @Override
  public void onClick(View arg0) {
   // Create instance of intent
   Intent intent = new Intent();
   //set class for intent 
   intent.setClass(PairingActivity.this, ListPairedDevicesActivity.class);
   //and start list activity for result
   startActivityForResult(intent, REQUEST_PAIRED_DEVICE); 
  }};

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   // is the request code for enable bluetooth or the paired devices
   if(requestCode == REQUEST_ENABLE_BT){
    //check Bluetooth state
    CheckBlueToothState();
   }
   if (requestCode == REQUEST_PAIRED_DEVICE){
    //do nothing is result is ok
    if(resultCode == RESULT_OK){
    }
   } 
  }   
}

   ListPairedDevicesActivity:

package com.shaikhhamadali.blogspot.bluetoothpairing;

import java.util.Set;

import android.app.ListActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class ListPairedDevicesActivity extends ListActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  //Create ArrayAdapter to store the list of paired Bluetooth Devices
  ArrayAdapter<String> btArrayAdapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
  //Create instance of Bluetooth Adapter
  BluetoothAdapter bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();
  //create Set instance to get the set of Paired devices  
  Set<BluetoothDevice> pairedDevices= bluetoothAdapter.getBondedDevices();
  //check that device has paired devices list or not
  if (pairedDevices.size() > 0) {
   //loop through the every paired device.
   for (BluetoothDevice device : pairedDevices) {
    //Get Name of the paired Device   
    String deviceBTName = device.getName();
    //Get Class of the Paired Device
    String deviceBTMajorClass= getBTMajorDeviceClass(device.getBluetoothClass().getMajorDeviceClass());
    //Add name and class of the Paired device
    btArrayAdapter.add(deviceBTName + "\n" + deviceBTMajorClass);
   }
  }
  //Set list Adapter to the ListActivity
  setListAdapter(btArrayAdapter);

 }

 private String getBTMajorDeviceClass(int major){
  //Types of the Bluetooth Classes
  switch(major){ 
  case BluetoothClass.Device.Major.AUDIO_VIDEO:
   return "AUDIO_VIDEO";
  case BluetoothClass.Device.Major.COMPUTER:
   return "COMPUTER";
  case BluetoothClass.Device.Major.HEALTH:
   return "HEALTH";
  case BluetoothClass.Device.Major.IMAGING:
   return "IMAGING"; 
  case BluetoothClass.Device.Major.MISC:
   return "MISC";
  case BluetoothClass.Device.Major.NETWORKING:
   return "NETWORKING"; 
  case BluetoothClass.Device.Major.PERIPHERAL:
   return "PERIPHERAL";
  case BluetoothClass.Device.Major.PHONE:
   return "PHONE";
  case BluetoothClass.Device.Major.TOY:
   return "TOY";
  case BluetoothClass.Device.Major.UNCATEGORIZED:
   return "UNCATEGORIZED";
  case BluetoothClass.Device.Major.WEARABLE:
   return "AUDIO_VIDEO";
  default: return "unknown!";
  }
 }

 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);
  //set Result OK and finish the list activity
  Intent intent = new Intent();
  setResult(RESULT_OK, intent);
  finish();
 }

}

3. note that:

  • Good practice is to always check that is bluetooth supported, is Bluetooth ON or not, and is it in discovering mode.
  • As you can see above I have used some common class types that are supported by Bluetooth are listed here on developer.android.com.
  • You can connect to any device after getting list of all paired devices.
  • Learn more about BluetoothEnable Disable Bluetooth.

4. conclusion:

  • Some information about how to get Bluetooth paired devices list.
  • know how to get Class type of Bluetooth paired devices.
  • Know how to Create List Activity.
  • How to generate list of dynamic items.

    5. About the post:

    • The code seems to explain itself due to comments, but if you have any questions you can freely ask too!
    •  Don’t mind to write a comment whatever you like to ask, to know,to suggest or recommend.
    •  Hope you enjoy it!
        6. Source Code:
                you can download the source code from: GoogleDriveGithub

        Cheers,
        Hamad Ali Shaikh