我希望可以帮助我, 我正在开发一个Android应用程序,需要连接蓝牙设备,如扫描仪和打印机,目前我可以列出所有配对设备,但我想知道配对设备是打印机,扫描仪,移动设备等。
有一些方法可以知道配对的蓝牙设备的类型吗?
答案 0 :(得分:3)
简而言之,
是的,你可以。您 可以使用设备的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.
答案 1 :(得分:3)
我有一个想法,它可能对你有帮助。
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!";
}
}
答案 2 :(得分:0)
接受的答案过于笼统,因为UUID 0001101-0000-1000-8000-00805F9B34FB断言设备具有串行端口功能,并且许多非打印机设备都具有这种UUID。
您应该评估完整的CoD,在此link上,您可以为需要识别的服务提取准确的位掩码,对于打印机来说,是:
0b000001000000011010000000
您可以使用以下方法在完整设备的CoD上进行屏蔽:
private static boolean isAPrinter(BluetoothDevice device){
int priterMask = 0b000001000000011010000000;
int fullCod = device.getBluetoothClass().hashCode();
Log.d(TAG, "FULL COD: " + fullCod);
Log.d(TAG,"MASK RESULT " + (fullCod & priterMask));
return (fullCod & priterMask) == priterMask;
}