[英]How to Check if an Paired Bluetooth device is a Printer or a Scanner (Android)
我希望能在开发一个Android应用程序时对我有所帮助,该应用程序需要连接蓝牙设备(例如扫描仪和打印机),目前我可以列出所有配对的设备,但是我想知道配对的设备是否是打印机,扫描仪,移动设备等
有某种方法可以知道配对的蓝牙设备的种类?
简而言之,
是的你可以。 您可以通过使用设备的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的信息。
我有一个主意,可能会对您有所帮助。
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 0001101-0000-1000-8000-00805F9B34FB断言设备具有串行端口功能,并且许多非打印机设备都具有这种UUID。
您应该评估完整的CoD,在此链接上,您可以为需要识别的服务提取准确的位掩码,对于打印机,该掩码为:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.