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
???