Проверьте состояние Bluetooth на конкретном устройстве на Android - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь узнать при запуске приложения, подключено ли сопряженное устройство или нет. На практике основное приложение дает мне 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 () возвращает неправильное значение. Если у кого-то есть идеи, я буду рад узнать.

1 Ответ

0 голосов
/ 12 июля 2019

Наконец-то я выполнил работу.Bluetooth-гарнитура похожа на гарнитуру, поэтому я сосредоточусь на ней:

public static void startListening() {
final BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Bundle info = intent.getExtras();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        String deviceAddress =  device.getAddress();
        if (action.equals( BluetoothDevice.ACTION_ACL_CONNECTED)){
            //do some stuff with connected device
        }
        if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)){
            // do things with disconnected
        }
    }
};}
...