Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Check if an Paired Bluetooth device is a Printer or a Scanner (Android)

I hope can help me, I am developing an Android App, that require to connect with Bluetooth devices, like Scanner and Printer, currently I can list all Paired devices, but i want to know if the paired device is a Printer, Scanner, Mobile, etc.

There is some way to know the kind of bluetooth device paired?

like image 551
Max Pinto Avatar asked Dec 05 '22 23:12

Max Pinto


2 Answers

Accepted answer is too generic, because UUID 0001101-0000-1000-8000-00805F9B34FB assert that device has serial port capabilites, and many not printer devices has this kind of UUID.

You should evalute full CoD, at this link you can extract exact bit mask for serivice you need to recognize, that for a printer is :

0b000001000000011010000000

with this you can do a mask on full device CoD as:

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;
}
like image 53
phingage Avatar answered Dec 10 '22 11:12

phingage


I have one idea, it may help you.

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!";
    }
}
like image 40
vels Avatar answered Dec 10 '22 11:12

vels