坑是这个样子的:大家可以写一段蓝牙的代码,监测蓝牙设备是否是开启的,如果没有开启请开启蓝牙设备并且扫描周围设备。那么代码就是这个样子的:
if (!mAdapter.isEnabled()){
mAdapter.enable();
}
if (mAdapter.isDiscovering()) {
Log.d(TAG, "btnScanBlue: true");
mAdapter.cancelDiscovery();
mAdapter.startDiscovery();
}else{
Log.d(TAG, "btnScanBlue: " + mAdapter.isEnabled());
mAdapter.startDiscovery();
}
运行一下试试呢,就会发现打印的日志虽然是 enable 了但依然是 false 嘛!导致并没有自动扫描,也就没有设备的发现了。当然这个 log 也是我最后排查错误的时候想到的。网络的资源大多都没有这个问题,解决方式如下两种:
1. 第一种是改业务逻辑,当进入这个操作界面的时候就自动 enable,用户按下按钮或者其他的时候开始扫描。
2. 在 enable 及 startDiscovery() 之间, sleep 一小会儿,就可以解决这个问题。
那如何获取对方蓝牙设备的种类呢?在广播接收者里写,上代码:
if (action.equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
int deviceClass = device.getBluetoothClass().getMajorDeviceClass();
mTxtDevice.append(device.getName() + ": " + device.getAddress() + "\n");
switch (deviceClass) {
case BluetoothClass.Device.COMPUTER_UNCATEGORIZED:
mTxtDevice.append("平板电脑\n");
break;
case BluetoothClass.Device.PHONE_UNCATEGORIZED:
mTxtDevice.append("手机\n");
break;
default:
mTxtDevice.append("其他类型...\n");
break;
}
}else if(action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)){
// 完成
}
转载请标明出处:http://blog.csdn.net/qq_24712507