Главная » Разработка для Android » Поиск удаленных устройств

0

В этом разделе вы узнаете, как инициировать процесс сканирования на своем локальном  Bluetooth-адаптере, чтобы найти доступные  поблизости устройства.

ПРИМЕЧАНИЕ

Процесс обнаружения может занять некоторое время (до 12 секунд). При этом производительность адаптера заметно снизится. Используйте механизм, описанный в этом разделе, чтобы проверять и отслеживать статус доступности Bluetooth-адаптера, избегая операций, требующих высокой пропускной способности (в том числе подключение к удален- ному устройству), пока выполняется процесс обнаружения.

Узнать о том, занят ли Bluetooth-адаптер процессом сканирования, вы можете с помощью метода isDiscovering.

Чтобы  начать обнаружение,  вызовите  метод startDiscovery из объ- екта BluetoothAdapter; чтобы его отменить, воспользуйтесь методом cancelDiscovery.

bluetooth.startDiscovery();

bluetooth.cancelDiscovery();

Процесс обнаружения идет в асинхронном  режиме. Android использует Широковещательные намерения, чтобы уведомлять ваше приложение о начале и конце сканирования, а также об устройствах, которые были обнаружены.

Вы можете отслеживать изменения в ходе обнаружения, создав При- емник широковещательных намерений, настроенный на действия  ACTION_ DISCOVERY_STARTED и ACTION_DISCOVERY_FINISHED, как по- казано в листинге 13.6.

Листинг 13.6. Отслеживание процесса обнаружения

BroadcastReceiver discoveryMonitor = new BroadcastReceiver() {

String dStarted = BluetoothAdapter.ACTION_DISCOVERY_STARTED; String dFinished = BluetoothAdapter.ACTION_DISCOVERY_FINISHED;

@Override

public void onReceive(Context context, Intent intent) {

if (dStarted.equals(intent.getAction())) {

// Процесс обнаружения начался. Toast.makeText(getApplicationContext(),

"Discovery Started…", Toast.LENGTH_SHORT).show();

}

else if (dFinished.equals(intent.getAction())) {

// Процесс обнаружения завершился. Toast.makeText(getApplicationContext(),

"Discovery Completed…", Toast.LENGTH_SHORT).show();

}

}

};

registerReceiver(discoveryMonitor,

new IntentFilter(dStarted));

registerReceiver(discoveryMonitor,

new IntentFilter(dFinished));

Обнаруженные Bluetooth-устройства возвращаются через Широковеща- тельные намерения с действием ACTION_FOUND.

Как показано  в листинге  13.7, каждое такое Намерение содержит  имя удаленного  устройства  в качестве  дополнительного параметра  с клю- чом BluetoothDevice.EXTRA_NAME, а также неизменяемый объект Blue- toothDevice (реализующий интерфейс Parcelable), хранящийся в дополни- тельном параметре с ключом BluetoothDevice.EXTRA_DEVICE.

Листинг 13.7. Обнаружение удаленных Bluetooth-устройств

BroadcastReceiver discoveryResult = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) { String remoteDeviceName =

intent.getStringExtra(BluetoothDevice.EXTRA_NAME);

BluetoothDevice remoteDevice;

remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

Toast.makeText(getApplicationContext(), "Discovered: " + remoteDeviceName, Toast.LENGTH_SHORT).show();

// TODO Сделать что-нибудь с объектом BluetoothDevice.

}

};

registerReceiver(discoveryResult,

new IntentFilter(BluetoothDevice.ACTION_FOUND));

if (!bluetooth.isDiscovering())

bluetooth.startDiscovery();

Объект  BluetoothDevice, возвращенный через Намерение,  — это обна- руженное  Bluetooth-устройство. В следующих  разделах  он будет исполь- зоваться для создания  соединения,  привязки и в конечном счете передачи данных между локальным адаптером и удаленным  устройством.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии