如何检查配对的蓝牙设备是打印机还是扫描仪(Android)

时间:2014-12-04 19:11:26

标签: java android bluetooth

我希望可以帮助我, 我正在开发一个Android应用程序,需要连接蓝牙设备,如扫描仪和打印机,目前我可以列出所有配对设备,但我想知道配对设备是打印机,扫描仪,移动设备等。

有一些方法可以知道配对的蓝牙设备的类型吗?

3 个答案:

答案 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;
      }