gpt4 book ai didi

android - 如何在 Android 上以编程方式配对和连接 HID 蓝牙设备(蓝牙键盘)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:43 25 4
gpt4 key购买 nike

我可以配对蓝牙键盘但无法连接以使其成为输入设备。我浏览了开发者网站提供的文档 - http://developer.android.com/guide/topics/connectivity/bluetooth.html#Profiles

它表示 Android Bluetooth API 为以下蓝牙配置文件提供了实现,但您可以实现接口(interface) BluetoothProfile 来编写您自己的类来支持特定的蓝牙配置文件。

  • 耳机
  • A2DP
  • 健康设备

没有关于如何为 HID 蓝牙设备(键盘)实现 BluetoothProfile 的文档

Android 本身已经为 HID 设备实现了蓝牙连接,但这些 API 是隐藏的。我也尝试过反射来使用它们。我没有收到任何错误,但键盘没有作为输入设备连接。这就是我所做的-

private void connect(final BluetoothDevice bluetoothDevice) {
if(bluetoothDevice.getBluetoothClass().getDeviceClass() == 1344){
final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
Log.i("btclass", profile + "");

if (profile == getInputDeviceHiddenConstant()) {
Class instance = null;
try {
//instance = Class.forName("android.bluetooth.IBluetoothInputDevice");
instance = Class.forName("android.bluetooth.BluetoothInputDevice");
Method connect = instance.getDeclaredMethod("connect", BluetoothDevice.class);
Object value = connect.invoke(proxy, bluetoothDevice);
Log.e("btclass", value.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}



}
}

@Override
public void onServiceDisconnected(int profile) {

}
};

mBluetoothAdapter.getProfileProxy(this, mProfileListener,getInputDeviceHiddenConstant());


}

}

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("", e.toString(), e);
}
}
}
return -1;
}

最佳答案

出于安全原因,第三方应用程序无法连接到蓝牙键盘,因为该应用程序可能是键盘记录器。因此只能由用户手动完成。

关于android - 如何在 Android 上以编程方式配对和连接 HID 蓝牙设备(蓝牙键盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36006599/

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