1

Bluetooth デバイスに接続する必要があるアプリケーションを開発しています。

Bluetooth デバイスをスキャンし、ListView でペアリングされたデバイスを一覧表示できます。

ListViewでデバイスをクリックしたときにBluetoothデバイスに接続したい。

この 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" を addressに変更すると、device.getAddress正常に動作します。

文字列を表示しますaddress。内容は bluetoothdevice の MAC アドレスですが、type は文字列です。

そして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 に答える