如何在 Android Studio 中的应用程序启动时连接配对的蓝牙设备?

How to connect paired bluetooth device on app startup in Android Studio?

有什么方法可以在应用程序启动时通过低功耗蓝牙自动连接特定设备吗?

在过去的几个小时里,我一直在浏览堆栈溢出并看到了许多类似的问题,尽管大多数都已经过时并且处理我无法完全理解的反射或其他复杂方法(这些方法我已经尝试实施,但没有成功,因为我真的不明白发生了什么)。

到目前为止,我已经设法通过它的友好名称找到了该设备,尽管我不知道该 if 语句中要执行什么。这是在我的 MainActivity 中:

protected void onCreate(Bundle savedInstanceState) {
    ...
    if (bluetoothAdapter == null) {
        Toast.makeText(getApplicationContext(),"Bluetooth not supported",Toast.LENGTH_SHORT).show();

    } else {
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if(pairedDevices.size()>0){
            for(BluetoothDevice device: pairedDevices){

                if (deviceName.equals(device.getName())) {

                    //Device found!
                    //Now how do I pair it?

                    break;
                }
    ...

假设您已成功识别 BlueToothDevice,您现在需要连接到 GATT(通用属性配置文件),它允许您传输数据。

使用 BlueToothDevice.connectGatt 方法。使用第一个重载,该方法接收一个 Context 、一个布尔值(false = 直接连接,true = 可用时连接)和一个 BlueToothGhattCallback。回调从设备接收信息。

BlueToothGatt blueToothGatt = device.connectGatt(this, false, blueToothGattCallback);

实现回调的例子:

BluetoothGattCallback blueToothGattCallback =
   new BluetoothGattCallback() 
   {
       @Override
       public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
          if(newState == BlueToothProfile.STATE_CONNECTED){ 
              /* do stuff */
          }
       }

   }

有关回调的更多详细信息 here

最终滚动浏览了 this app 的源代码,特别是 SerialSocket、SerialService 和 SerialListener 文件,它们完全解决了我的问题。