gpt4 book ai didi

android - 连接到特定的 HID 配置文件蓝牙设备

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:10 27 4
gpt4 key购买 nike

我将蓝牙条码扫描仪连接到我的安卓平板电脑。条形码扫描仪作为输入设备与 Android 设备绑定(bind) - HID 配置文件。它在系统蓝牙管理器中显示为键盘或鼠标。我发现蓝牙配置文件输入设备类存在但被隐藏了。 class 和 btprofile 常量在 android 文档中有 @hide 注释。

隐藏类:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3.1_r1/android/bluetooth/BluetoothInputDevice.java

这里它们也应该是其他 3 个常量

developer.android.com/reference/android/bluetooth/BluetoothProfile.html#HEADSET

就像

public static final int INPUT_DEVICE = 4;
public static final int PAN = 5;
public static final int PBAP = 6;

常量很容易通过反射访问。我需要实现的是隐藏配置文件(INPUT_DEVICE)的设备列表。使用方法进行小的更改应该很简单:

developer.android.com/reference/android/bluetooth/BluetoothA2dp.html#getConnectedDevices()

不适用于 A2dp 配置文件,但适用于通过反射方法访问的 hid 配置文件。可悲的是

Class c = Class.forName("android.bluetooth.BluetoothInputDevice")

不会工作..有什么想法我应该如何解决这个问题?我只需要隐藏设备的列表

最佳答案

我想出了解决问题的方法。 That很有帮助。首先,我需要准备反射方法,它返回隐藏配置文件的 input_device 隐藏常量:

public static int getInputDeviceHiddenConstant() {
Class<BluetoothProfile> clazz = BluetoothProfile.class;
for (Field f : clazz.getFields()) {
int mod = f.getModifiers();
if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && Modifier.isFinal(mod)) {
try {
if (f.getName().equals("INPUT_DEVICE")) {
return f.getInt(null);
}
} catch (Exception e) {
Log.e(LOG_TAG, e.toString(), e);
}
}
}
return -1;
}

我可以使用值 4 代替该函数,但我想优雅地使用它。

第二步是定义特定配置文件的监听器:

BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
Log.i("btclass", profile + "");
if (profile == ConnectToLastBluetoothBarcodeDeviceTask.getInputDeviceHiddenConstans()) {
List<BluetoothDevice> connectedDevices = proxy.getConnectedDevices();
if (connectedDevices.size() == 0) {
} else if (connectedDevices.size() == 1) {
BluetoothDevice bluetoothDevice = connectedDevices.get(0);
...
} else {
Log.i("btclass", "too many input devices");
}
}

}

@Override
public void onServiceDisconnected(int profile) {

}
};

第三步我调用了

mBluetoothAdapter.getProfileProxy(getActivity(), mProfileListener,
ConnectToLastBluetoothBarcodeDeviceTask.getInputDeviceHiddenConstant());

一切正常,mProfileListener 向我返回特定配置文件蓝牙设备/-es 的列表。最有趣的事情发生在 onServiceConnected() 方法中,它返回隐藏类 BluetoothInputDevice 的对象:)

关于android - 连接到特定的 HID 配置文件蓝牙设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com