1

我正在开发一个必须连接到蓝牙设备的应用程序。

我可以扫描蓝牙设备并列出通过 ListView 配对的设备。

当我单击 ListView 上的设备时,我想连接到蓝牙设备。

此 java 代码是我单击 ListView 上的设备项时的操作。

pair_devices_list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub              

                AlertDialog.Builder deviceInfo = new AlertDialog.Builder(DeviceList.this);
                mBluetoothAdapter.cancelDiscovery();//stop scan             

                String info = ((TextView) arg1).getText().toString();
                String address = info.substring(info.length()-18);

                BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);                

                try {
                    BluetoothSocket socket = connect_device.createRfcommSocketToServiceRecord(my_UUID);
                    socket.connect();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });

当我执行应用程序时,当我输入以下代码时它总是崩溃:

BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);

但是当我将字符串“ address”更改为地址device.getAddress时,它工作正常。

我显示字符串address。它的内容是蓝牙设备的 MAC 地址,但它的类型是字符串。

getRemoteDevice这里我选择字符串的类型。

所以我不知道为什么我使用字符串的时候APP总是崩溃address???

4

2 回答 2

0

我不知道那段带有子字符串信息等的代码是否是必要的。尝试像这样简单地初始化您的字符串:

String address = device.getAddress;
于 2016-11-25T13:26:31.433 回答
0

MAC地址由17个字符组成,你取18个。

String address = info.substring(info.length()-17);
于 2016-11-25T12:25:31.147 回答