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

0

Процесс, когда два устройства  ищут друг друга, чтобы установить  со- единение, называется обнаружением. Прежде чем вы сможете пользоваться объектом BluetoothSocket, локальный Bluetooth-адаптер должен связаться с удаленным  устройством.  Но для этого нужно, чтобы оба устройства  об- ладали возможностью «увидеть» друг друга.

ПРИМЕЧАНИЕ

Хотя протокол Bluetooth поддерживает динамические (ad-hoc) соедине- ния для передачи данных, этот механизм пока что недоступен в Android. В настоящее время соединение поддерживается только между связан- ными устройствами.

Управление обнаруживаемостью  устройства

Чтобы  ваш локальный Bluetooth-адаптер во время сканирования мог быть обнаружен удаленным устройством на базе Android, необходимо сде- лать его доступным для обнаружения.

Обнаруживаемость Bluetooth-адаптера зависит от установленного режима для сканирования, который вы можете узнать, вызвав метод getScanMode из объекта BluetoothAdapter. К вам вернется одна из констант.

SCAN_MODE_CONNECTABLE_DISCOVERABLE. Возможны оба режима сканирования — inquiry scan и page scan. Это значит, что адап- тер доступен при сканировании любым Bluetooth-устройством.

SCAN_MODE_CONNECTABLE.  Сканирование возможно  только в режиме page scan. Это значит, что локальный адаптер может быть обнаружен  только тем устройством,  которое уже ранее было к нему подключено и привязано. Новые устройства  ничего не обнаружат.

SCAN_MODE_NONE. Локальный адаптер не может быть обнаружен никаким удаленным  устройством.

Для обеспечения  конфиденциальности устройства  на базе Android  по умолчанию имеют режим SCAN_MODE_NONE. Чтобы это изменить, вам нужно получить  явное подтверждение от пользователя. Сделать это мож- но с помощью запуска  новой Активности, используя действие  ACTION_ REQUEST_DISCOVERABLE:

String aDiscoverable = BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;

startActivityForResult(new Intent(aDiscoverable), DISCOVERY_REQUEST);

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

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

Рис. 13.2.

Чтобы узнать о выборе пользователя, переопределите обработчик onActivityResult, как показано  в листинге  13.4. Возвращаемый параметр resultCode в случае положительного ответа будет содержать  временной интервал. Если пользователь запретил делать Bluetooth-адаптер доступным для сканирования, resultCode будет иметь отрицательное значение.

Листинг 13.4. Отслеживание режимов доступности

@Override

protected void onActivityResult(int requestCode,

int resultCode, Intent data) {

if (requestCode == DISCOVERY_REQUEST) { boolean isDiscoverable = resultCode > 0; int discoverableDuration = resultCode;

}

}

В качестве  альтернативного подхода можно отслеживать изменения в состоянии доступности  адаптера, получая  действие  ACTION_SCAN_ MODE_CHANGED, как показано в листинге 13.5. Широковещательное наме- рение в виде дополнительных параметров содержит текущий и предыдущий режимы сканирования.

Листинг 13.5. Альтернативное отслеживание режимов доступности

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String prevScanMode = BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE; String scanMode = BluetoothAdapter.EXTRA_SCAN_MODE;

int scanMode = intent.getIntExtra(scanMode, -1);

int prevMode = intent.getIntExtra(prevScanMode, -1);

}

};

new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED));

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

По теме:

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