【发布时间】:2014-12-04 19:11:26
【问题描述】:
希望能帮到我 我正在开发一个 Android 应用程序,需要连接蓝牙设备,如扫描仪和打印机,目前我可以列出所有已配对的设备,但我想知道配对的设备是打印机、扫描仪、手机等。
有什么方法可以知道配对的蓝牙设备的种类?
【问题讨论】:
希望能帮到我 我正在开发一个 Android 应用程序,需要连接蓝牙设备,如扫描仪和打印机,目前我可以列出所有已配对的设备,但我想知道配对的设备是打印机、扫描仪、手机等。
有什么方法可以知道配对的蓝牙设备的种类?
【问题讨论】:
接受的答案过于笼统,因为 UUID 0001101-0000-1000-8000-00805F9B34FB 断言设备具有串行端口功能,而许多非打印机设备具有这种 UUID。
您应该评估完整的 CoD,在此 link 您可以为您需要识别的服务提取准确的位掩码,对于打印机来说是:
0b000001000000011010000000
有了这个,你可以在完整的设备 CoD 上做一个掩码:
private static boolean isAPrinter(BluetoothDevice device){
int printerMask = 0b000001000000011010000000;
int fullCod = device.getBluetoothClass().hashCode();
Log.d(TAG, "FULL COD: " + fullCod);
Log.d(TAG, "MASK RESULT " + (fullCod & printerMask));
return (fullCod & printerMask) == printerMask;
}
【讨论】:
我有一个想法,可能对你有帮助。
for (BluetoothDevice device : pairedDevices)
{
String deviceBTMajorClass = getBTMajorDeviceClass(device.getBluetoothClass().getMajorDeviceClass());
if (D) Log.d(TAG, "deviceBTMajorClass"+deviceBTMajorClass);
//btArrayAdapter.add(deviceBTName + "\n"+ deviceBTMajorClass);
data.add(device.getName() + "\n" + device.getAddress());
}
private String getBTMajorDeviceClass(int major) {
switch (major) {
case BluetoothClass.Device.Major.AUDIO_VIDEO:
return "AUDIO_VIDEO";
case BluetoothClass.Device.Major.COMPUTER:
return "COMPUTER";
case BluetoothClass.Device.Major.HEALTH:
return "HEALTH";
case BluetoothClass.Device.Major.IMAGING:
return "IMAGING";
case BluetoothClass.Device.Major.MISC:
return "MISC";
case BluetoothClass.Device.Major.NETWORKING:
return "NETWORKING";
case BluetoothClass.Device.Major.PERIPHERAL:
return "PERIPHERAL";
case BluetoothClass.Device.Major.PHONE:
return "PHONE";
case BluetoothClass.Device.Major.TOY:
return "TOY";
case BluetoothClass.Device.Major.UNCATEGORIZED:
return "UNCATEGORIZED";
case BluetoothClass.Device.Major.WEARABLE:
return "AUDIO_VIDEO";`enter code here`
default:
return "unknown!";
}
}
【讨论】:
总之,
是的,你可以。你 可以通过使用设备的UUID 来做到这一点。如果您知道设备的 UUID,您可以从报告的 UUID 中匹配它们,并知道哪个配对设备是什么。
类似这样的:
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Method getUuidsMethod = BluetoothAdapter.class.getDeclaredMethod("getUuids", null);
ParcelUuid[] uuids = (ParcelUuid[]) getUuidsMethod.invoke(adapter, null);
现在只需将检索到的 UUID 与已知的设备 UUID(在线或盒子上)进行比较。
如果它们匹配,您就会知道它是什么设备。
注意:最常见的 UUID(扫描仪、打印机、鼠标)具有通用 UUID 0001101-0000-1000-8000-00805F9B34FB
了解getUUID() 方法、paracable 方法、Method java 类,最后是Java.util.UUID.
【讨论】: