#AndroidDev Finding – BluetoothClass

By -

If you are andorid developer, you might have thought over this point, how android wear companion app is only listing down android wear devices.

Every bluetooth device is having defined bluetooth class and device class. If you do reverse engineering of the android wear companion application, you would get below code:

  public static boolean isWatch(BluetoothDevice paramBluetoothDevice, BluetoothClass paramBluetoothClass)
  {
    return (paramBluetoothClass != null) && (paramBluetoothClass.getDeviceClass() == 1796);
  }
  
  public static boolean isWatchConfig(Context paramContext, ConnectionConfiguration paramConnectionConfiguration)
  {
    int i = 1;
    if ((!paramConnectionConfiguration.isValid()) || (paramConnectionConfiguration.getType() != i) || (paramConnectionConfiguration.getAddress() == null)) {
      return false;
    }
    BluetoothDevice localBluetoothDevice = getBluetoothDevice(paramContext, paramConnectionConfiguration.getAddress());
    if (localBluetoothDevice != null) {}
    try
    {
      boolean bool = isWatch(localBluetoothDevice, localBluetoothDevice.getBluetoothClass());
      if (bool) {}
      for (;;)
      {
        return i;
        int j = 0;
      }
      return false;
    }
    catch (NullPointerException localNullPointerException)
    {
      Log.w("ClockworkCompanion", "Failed to get BT class: ", localNullPointerException);
    }
  }

Finding:

BluetoothClass represents a Bluetooth class, which describes the general characteristics and capabilities of a device. For example, a Bluetooth class will specify the general device type such as a phone, tablet or wearable wrist, and whether it’s capable of services such as audio or telephony.

Using getBluetoothClass() of BluetoothDevice class, we can retrieve the class for a remote device.

Using getDeviceClass() of BluetoothClass, we can retrieve the device class encoded in the Bluetooth class. Value retrieved using getDeviceClass() can be compared with the public constants defined in the BluetoothClass.Device.

public static final int WEARABLE_WRIST_WATCH

Added in API level 5
Constant Value: 1796 (0x00000704)

So as per the android wear app logic, it is comparing bluetooth class with 1796 which is nothing but a constant WEARABLE_WRIST_WATCH declared in BluetoothClass.Device class.

Explore:

Paresh Mayani

Lazy android developer, exploring the horizon of android development since 7 years, currently working as a Technical Lead - Android at Simform Solutions, India. Former Application Architect at KarConnect. He is the Head/Organizer of Google Developers Group (GDG), Ahmedabad

Loading Facebook Comments ...
Loading Disqus Comments ...