Главная » Разработка для Android » Управление свойствами и состоянием Bluetooth-адаптера

0

Класс BluetoothAdapter содержит методы для считывания и изменения свойств локального  Bluetooth-устройства.

ПРИМЕЧАНИЕ

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

Если Bluetooth-адаптер включен и в манифесте приложения содержится полномочие BLUETOOTH, вы можете получить доступ к «дружественному имени»  устройства  (произвольная строка, которую  пользователь может задать и затем использовать для идентификации конкретного устройства), а также к аппаратному адресу, как показано в листинге 13.2.

Прежде  чем начать работу  с этими  свойствами,  с помощью  метода isEnabled  удостоверитесь,  что устройство включено.

Листинг 13.2. Считывание свойств Bluetooth-адаптера

BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

String toastText;

if (bluetooth.isEnabled()) {

String address = bluetooth.getAddress(); String name = bluetooth.getName(); toastText = name + " : " + address;

}

else

toastText = "Bluetooth is not enabled"; Toast.makeText(this, toastText, Toast.LENGTH_LONG).show();

Если есть полномочие BLUETOOTH_ADMIN, вы имеете возможность

изменять  имя адаптера, используя метод setName:

bluetooth.setName("Blackfang");

Для более подробной информации о состоянии Bluetooth-адаптера вос- пользуйтесь методом getState, который  вернет одну из нижеследующих констант, принадлежащих классу BluetoothAdapter:

STATE_TURNING_ON;

STATE_ON;

STATE_TURNING_OFF;

STATE_OFF.

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

Чтобы активизировать Bluetooth-адаптер, запустите  системное диало- говое окно, используя статическую  константу  из класса BluetoothAdapter в качестве параметра для метода startActivityForResult:

String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;

startActivityForResult(new Intent(enableBT), 0);

Результат показан  на рис. 13.1. Система  сообщает пользователю, что приложение требует включить Bluetooth-адаптер, и запрашивает подтверж- дение. Если подтверждение будет получено, адаптер включится (или про- изойдет  ошибка),  диалоговое  окно закроется,  а на передний  план выйдет Активность, из которой оно было вызвано. Если пользователь запретит вклю- чение, диалоговое окно немедленно закроется. Используйте код результата, получаемый обработчиком onActivityResult, чтобы убедиться в успешности этих действий.

ВНИМАНИЕ

Если в манифесте приложения содержится полномочие BLUETOOTH_ ADMIN, вы можете включать и выключать Bluetooth-адаптер с помощью методов enable и disable.

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

Включение и выключение Bluetooth-адаптера занимает некоторое вре- мя и происходит  в асинхронном  режиме.  Вместо того чтобы постоянно опрашивать устройство,  ваше приложение должно зарегистрировать При- емник широковещательных намерений, который  будет следить  за действием ACTION_STATE_CHANGED. Транслируемое Намерение будет содержать два дополнительных параметра — EXTRA_STATE и EXTRA_PREVIOUS_ STATE, указывающих  на текущее и предыдущее состояния адаптера соот- ветственно.

В листинге 13.3 демонстрируется Намерение, с помощью которого пользователю предлагается активизировать Bluetooth, а также  объект BroadcastReceiver, отслеживающий изменения в состоянии адаптера.

Листинг 13.3. Включение Bluetooth и отслеживание состояния адаптера

BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

BroadcastReceiver bluetoothState = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String prevStateExtra = BluetoothAdapter.EXTRA_PREVIOUS_STATE; String stateExtra = BluetoothAdapter.EXTRA_STATE;

int state = intent.getIntExtra(stateExtra, -1);

int previousState = intent.getIntExtra(prevStateExtra, -1);

String tt = "";

switch (state) {

case (BluetoothAdapter.STATE_TURNING_ON) : {

tt = "Bluetooth turning on"; break;

}

case (BluetoothAdapter.STATE_ON) : { tt = "Bluetooth on"; unregisterReceiver(this);

break;

}

case (BluetoothAdapter.STATE_TURNING_OFF) : {

tt = "Bluetooth turning off"; break;

}

case (BluetoothAdapter.STATE_OFF) : {

tt = "Bluetooth off"; break;

}

default: break;

}

Toast.makeText(this, tt, Toast.LENGTH_LONG).show();

}

};

if (!bluetooth.isEnabled()) {

String actionStateChanged = BluetoothAdapter.ACTION_STATE_CHANGED; String actionRequestEnable = BluetoothAdapter.ACTION_REQUEST_ENABLE; registerReceiver(bluetoothState,

new IntentFilter(actionStateChanged));

startActivityForResult(new Intent(actionRequestEnable), 0);

}

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

По теме:

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