Bluetooth Low Energy in Android.

Android provides built-in platform support for Bluetooth Low Energy (BLE) in the central role and provides APIs that apps can use to discover devices, query for services, and transmit information.


Common use cases include the following:

  • Transferring small amounts of data between nearby devices.
  • Interacting with proximity sensors to give users a customized experience based on their current location.

The following is a summary of key BLE terms and concepts:

         Generic Attribute Profile (GATT)

         Profiles

  • Attribute Protocol (ATT)
    Characteristic
    Descriptor
    Service


    Find BLE devices
    private BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
    private boolean scanning;
    private Handler handler = new Handler();

    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 10000;

    private void scanLeDevice() {
       
    if (!scanning) {
           
    // Stops scanning after a predefined scan period.
            handler
    .postDelayed(new Runnable() {
               
    @Override
               
    public void run() {
                    scanning
    = false;
                    bluetoothLeScanner
    .stopScan(leScanCallback);
               
    }
           
    }, SCAN_PERIOD);

            scanning
    = true;
            bluetoothLeScanner
    .startScan(leScanCallback);
       
    } else {
            scanning
    = false;
            bluetoothLeScanner
    .stopScan(leScanCallback);
       
    }
    }
    private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter();

    // Device scan callback.
    private ScanCallback leScanCallback =
           
    new ScanCallback() {
               
    @Override
               
    public void onScanResult(int callbackType, ScanResult result) {
                   
    super.onScanResult(callbackType, result);
                    leDeviceListAdapter
    .addDevice(result.getDevice());
                    leDeviceListAdapter
    .notifyDataSetChanged();
               
    }
           
    };
    Connect to a GATT server

    bluetoothGatt = device.connectGatt(this, false, gattCallback);



    class BluetoothLeService extends Service {

       
    private Binder binder = new LocalBinder();

       
    @Nullable
       
    @Override
       
    public IBinder onBind(Intent intent) {
           
    return binder;
       
    }

       
    class LocalBinder extends Binder {
           
    public BluetoothLeService getService() {
               
    return BluetoothLeService.this;
           
    }
       
    }
    }
    class BluetoothLeService extends Service {

       
    public static final String TAG = "BluetoothLeService";

       
    private BluetoothAdapter bluetoothAdapter;

       
    public boolean initialize() {
            bluetoothAdapter
    = BluetoothAdapter.getDefaultAdapter();
           
    if (bluetoothAdapter == null) {
               
    Log.e(TAG, "Unable to obtain a BluetoothAdapter.");
               
    return false;
           
    }
           
    return true;
       
    }

       
    ...
    }
    class DeviceControlsActivity extends AppCompatActivity {

       
    private ServiceConnection serviceConnection = new ServiceConnection() {
           
    @Override
           
    public void onServiceConnected(ComponentName name, IBinder service) {
                bluetoothService
    = ((LocalBinder) service).getService();
               
    if (bluetoothService != null) {
                   
    if (!bluetoothService.initialize()) {
                       
    Log.e(TAG, "Unable to initialize Bluetooth");
                        finish
    ();
                   
    }
                   
    // perform device connection
               
    }
           
    }

           
    @Override
           
    public void onServiceDisconnected(ComponentName name) {
                bluetoothService
    = null;
           
    }
       
    };

       
    ...
    }

Popular posts from this blog

Simple Sign up design. Android.

Cart page design in android.

Set Date on jDateChooser and retrieve record from database.