Создание службы для подключения к Bluetooth из элемента ListView - PullRequest
0 голосов
/ 22 декабря 2018

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

Массив сопряженных устройств и код представления списка приведены ниже:

            pairedBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Set<BluetoothDevice> bt = mBluetoothAdapter.getBondedDevices();
                String[] strings = new String[bt.size()];
                btArray = new BluetoothDevice[bt.size()];
                int index = 0;

                if (bt.size() > 0) {
                    for (BluetoothDevice device : bt) {
                        btArray[index] = device;
                        strings[index] = device.getName();
                        index++;
                    }
                    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, strings);
                    mylistView.setAdapter(arrayAdapter);
                }

            }
        });

В настоящее время у меня есть другой поток, который подключаетсяк Bluetooth после щелчка по представлению списка:

            mylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
                ClientClass clientClass;
                clientClass = new ClientClass(btArray[i]);
                clientClass.start();
            }
        });

private class ClientClass extends Thread {
    private BluetoothDevice device;

    public ClientClass(BluetoothDevice device1) {
        device = device1;
        try {
            socket = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void run() {

        try {
            socket.connect();

        } catch (IOException e) {
            text.setText("Status: Not Connected");
            try {
                socket = (BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(device, 1);
                socket.connect();
                if (socket.isConnected()) {
                    text.setText("Status: Connected to Device");
                }
            } catch (IllegalAccessException e1) {
                e1.printStackTrace();
                text.setText("Status: Not Connected");
            } catch (InvocationTargetException e1) {
                e1.printStackTrace();
                text.setText("Status: Not Connected");
            } catch (IOException e1) {
                e1.printStackTrace();
                text.setText("Status: Not Connected");
            } catch (NoSuchMethodException e1) {
                e1.printStackTrace();
                text.setText("Status: Not Connected");
            } catch (Exception el) {
                el.printStackTrace();
                text.setText("Status: Failed");
            }
        }
    }
}

Я исследовал службы, но не смог найти способ передачи данных из массива в службу или подключитьсяна Bluetooth от службы.

Любая помощь будет принята с благодарностью.

...