iOS 上的蓝牙连接

Bluetooth connections on iOS

我们正在尝试观察蓝牙设备何时与 iPhone 连接和断开连接。当某些感兴趣的设备连接时,我们基本上想要做出反应(不一定在前台)。在 Android 中,您可以收到 ACL_CONNECTED and ACL_DISCONNECTED 个操作。

iOS 上的这种行为有什么等价物?

我首先查看了 CoreBluetooth,然后发现它是用于低功耗蓝牙的,然后查看了 ExternalAccessory,但它仅在第 2.5 节的 the picker and seems to require users to go through the picker. The only method we found that would work would be to go through Apple's BluetoothManager itself, which is prohibited as per the AppStore guidelines 中显示了 MFI 设备,大概是这样可以完全控制 Apple 生态系统。


等价Android代码:

MyReceiver.java

public class MyReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(BluetoothDevice.ACL_CONNECTED)) {
      //do stuff
    } else if (intent.getAction().equals(BluetoothDevice.ACL_DISCONNECTED)) {
      //do stuff
    }
  }

}

AndroidManifext.xml

<receiver
  android:name="com.myapp.MyReceiver"
  android:exported="true"
  android:enabled="true"
  android:label="MyReceiver">
  <intent-filters>
      <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
      <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
    </intent-filters>
</receiver>

您不能像 iOS 中那样直接监听全局事件,所有应用程序都在自己的沙箱中,无法相互访问。

也就是说,您可以使用 CBCentralManagerretrieveConnectedPeripheralsWithServices: 方法来获取当前连接的设备列表。定期调用该函数并检查更改可以实现您正在寻找的东西。

I published a demo app called Beetee 这显示了蓝牙经典如何在 iOS 上工作以及全局事件是什么。但是这个私有框架不是AppStore投诉的!