Listar aparelhos disponíveis no Bluetooth - Android
Autor: Felipe Bonezi | Publicado: 2013-01-15T12:54:00-03:00

Antes de querer desenvolver qualquer aplicativo que necessite da tecnologia do Bluetooth, você precisa primeiro listar os aparelhos disponíveis na redondeza e guardar algumas informações importantes como o nome do aparelho encontrado e seu respectivo Mac Address para que uma conexão seja efetuada futuramente.



Diferente do que se imagina, para se listar os aparelhos que estão ligados no recurso do Bluetooth, não existe nenhuma complicação. O próprio Google Android nos facilita muito através da classe BluetoothAdapter que encapsula toda a complicação que se pode ter no gerenciamento desse processo.



Basicamente, para listarmos os aparelhos, precisamos dizer ao BluetoothAdapter que inicialize a busca por aparelhos. O BluetoothAdapter quando inicializar a busca irá lançar um BroadcastReceiver com uma Intent com a respectiva action BluetoothAdapter.ACTION_STARTED_DISCOVERY, e outro BroadcastReceiver quando a busca for finalizada com a action BluetoothAdapter.ACTION_FINISHED_DISCOVERY, e por final, quando algum aparelho for encontrado será lançado outro Broadcast com a action BluetoothDevice.ACTION_FOUND!


public class BluetoothActivity extends Activity {

   private String STARTED = BluetoothAdapter.ACTION_DISCOVERY_STARTED;
   private String FINISHED = BluetoothAdapter.ACTION_DISCOVERY_FINISHED;
   private String FOUND = BluetoothDevice.ACTION_FOUND;

   private BluetoothAdapter mBTAdapter;
   private BluetoothReceiver mReceiver;
   private List mDevices;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      
      mBTAdapter = BluetoothAdapter.getDefaultAdapter();
      mReceiver = new BluetoothReceiver();
   }

   @Override
   public void onResume() {
      super.onResume();
      registerReceiver(mReceiver, new IntentFilter(STARTED));
      registerReceiver(mReceiver, new IntentFilter(FINISHED));
      registerReceiver(mReceiver, new IntentFilter(FOUND));
      mBTAdapter.startDiscovery();
   }

   @Override
   public void onPause() {
      super.onPause();
      if (mDevices != null) {
         mDevices.clear();
      }
      mBTAdapter.cancelDiscovery();
      unregisterReceiver(mReceiver);
   }

   private class BluetoothReceiver extends BroadcastReceiver {
      
      @Override
      public void onReceiver(Context context, Intent intent) {
         String action = intent.getAction();
         if (action.equals(STARTED) {
            // Começou a procurar os aparelhos com bluetooth...
         } else if (action.equals(FINISHED)) {
            // Terminou a procura por aparelhos...
         } else if (action.equals(FOUND)) {
            // Aparelho encontrado...
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);

            String deviceName = device.getName();
            String deviceAddress = device.getAddress();

            Log.d("Bluetooth", "Nome = " + deviceName + " - MAC: " + deviceAddress);

            if (mDevices == null) {
               mDevices = new ArrayList();
            }

            if (!mDevices.contains(device)) {
               mDevices.add(device);
            }
         }
      }

   }

}



Espero que ajude vocês,

Att,
Felipe Bonezi