Я пытаюсь узнать при запуске приложения, подключено ли сопряженное устройство или нет. На практике основное приложение дает мне MAC-адрес, и я должен ответить, подключены мы или нет.
BroadcastReceiver не может быть полным вариантом, потому что если пользователь установит соединение с устройством до запуска приложения, я не смогу узнать, подключен ли я к устройству или нет.
Я нашел это на форуме: Как программно определить, подключено ли устройство Bluetooth?
Невозможно получить список подключенных устройств при запуске приложения. Bluetooth API позволит вам прослушивать только изменения соединения.
но я думаю, что это больше не точно, потому что с этим кодом:
public class cServiceListener implements BluetoothProfile.ServiceListener {
private static final int[] states={ BluetoothProfile.STATE_DISCONNECTING,
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.STATE_CONNECTED,
BluetoothProfile.STATE_CONNECTING};
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
@Override
public void onServiceConnected(int profile, BluetoothProfile bluetoothProfile) {
//List<BluetoothDevice> Devices=bluetoothProfile.getDevicesMatchingConnectionStates(states);
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = mBluetoothAdapter.getBondedDevices();
Log.i("myTag","\n\n<==============profile connexion state =============> : "+ mBluetoothAdapter.getProfileConnectionState(1));
for (BluetoothDevice loop:devices){
Log.i("myTag","Nom du device :" +loop.getName()+" Etat du Device:"+bluetoothProfile.getConnectionState(loop)
+ " Type du device : "+ loop.getType() + " Classe du device : " + loop.getBluetoothClass().toString() );
}
}
@Override
public void onServiceDisconnected(int profile) {
}}
Я могу сказать, если некоторые устройства подключены или нет, но не со всеми из них!
Я пробую код с портативными динамиками и с другими устройствами, где звонки И звуки отвечают, и он отлично работает: если устройство подключено, оно возвращает 2, а если нет - 0.
Но когда я пытаюсь достичь своей реальной цели (то есть автомобиля), он возвращает 0 в любое время. Тестовая машина принимает только звонки (вы не можете воспроизводить музыку с подключением Bluetooth, к старому). Поэтому я думаю, что с более современным автомобилем он может работать ..
Сначала я думал, что машина использует технологию BLE, поэтому я пытаюсь использовать этот код
List<BluetoothDevice> devices = bluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
Log.d("myTag","\n Taille de la liste : " + devices.size());
for(BluetoothDevice device : devices) {
if(device.getType() == BluetoothDevice.DEVICE_TYPE_LE) {
Log.d("myTag","\n BLE <===> Nom du device :" + device.getName());
}
Log.d("myTag","\n<====NONE BLE=====> // \n\n Nom du device :" + device.getName()+"\n\n");
}
Но на самом деле это не главное, это не работает.
И это странно, потому что
mBluetoothAdapter.getProfileConnectionState(1)
возвращает правильное значение только при подключении к машине.
Я действительно не знаю, что делать, знаю и почему
bluetoothProfile.getConnectionState () возвращает неправильное значение.
Если у кого-то есть идеи, я буду рад узнать.