- Сначала вам нужно получить
BluetoothAdapter
:
окончательный BluetoothAdapter btAdapter =
BluetoothAdapter.getDefaultAdapter ();
- Во-вторых, вам нужно убедиться, что Bluetooth доступен и включен:
if (btAdapter! = Null && btAdapter.isEnabled ()) // null означает нет
Bluetooth!
Если Bluetooth не отключен, вы можете либо использовать btAdapter.enable()
, что не рекомендуется в документации, либо попросить пользователя сделать это: Программно включить Bluetooth на Android
- В-третьих, вам нужно определить массив состояний (чтобы отфильтровать
неподключенные устройства):
final int [] states = new int [] {BluetoothProfile.STATE_CONNECTED,
BluetoothProfile.STATE_CONNECTING};
В-четвертых, вы создаете BluetoothProfile.ServiceListener
, который
содержит два обратных вызова, запускаемых при подключении службы, и
отключен:
final BluetoothProfile.ServiceListener listener = new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
}
@Override
public void onServiceDisconnected(int profile) {
}
};
Теперь, поскольку вам нужно повторить процесс запроса для всех доступных профилей Bluetooth в Android SDK ( A2Dp, GATT, GATT_SERVER, Handset, Health, SAP ), вы должны выполнить следующие действия:
В onServiceConnected
поместите условие, которое проверяет текущий профиль, чтобы мы добавили найденные устройства в правильный набор и использовали: proxy.getDevicesMatchingConnectionStates(states)
для фильтрации неподключенных устройств:
switch (profile) {
case BluetoothProfile.A2DP:
ad2dpDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.GATT: // NOTE ! Requires SDK 18 !
gattDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.GATT_SERVER: // NOTE ! Requires SDK 18 !
gattServerDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.HEADSET:
headsetDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.HEALTH: // NOTE ! Requires SDK 14 !
healthDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.SAP: // NOTE ! Requires SDK 23 !
sapDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
}
И, наконец, последнее, что нужно сделать, это запустить процесс запроса:
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.A2DP);
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.GATT); // NOTE ! Requires SDK 18 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.GATT_SERVER); // NOTE ! Requires SDK 18 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.HEADSET);
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.HEALTH); // NOTE ! Requires SDK 14 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.SAP); // NOTE ! Requires SDK 23 !
источник: https://stackoverflow.com/a/34790442/2715054