gpt4 book ai didi

ios - 当 iOS 应用程序在 Xamarin 中作为后台时,如何通知我蓝牙连接?

转载 作者:可可西里 更新时间:2023-11-01 04:55:25 29 4
gpt4 key购买 nike

我们需要我们的应用程序在连接或断开蓝牙音频设备(特别是他们车内的设备)时从操作系统接收通知。

应用程序在 BT 设备最初连接时收到通知,但它似乎立即断开连接并记录错误:

BTCentralManager::DisconnectedPeripheral > SoundCore mini(ATT) ERROR Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us."

...并且“DisconnectedPeripheral”事件实际上从未被触发。

我们不确定如何在应用后台运行时简单地接收连接和断开连接事件。

我们是否需要将外围设备与中央管理器连接起来?我们只需要知道音频设备是否已连接——我们不需要以任何方式与它交互。

在获得断开外围设备后,事件永远不会从后台第二次调用。大概是因为我们收到了错误消息。

示例代码如下:

public class BTCentralManager : CBCentralManagerDelegate
{
public CBCentralManager centralManager;
public static CBPeripheral peripheral;

public BTCentralManager()
{
System.Diagnostics.Debug.WriteLine("BTCentralManager::Constructor > ");

centralManager = new CBCentralManager(this, new DispatchQueue("myqueue"),
new CBCentralInitOptions { ShowPowerAlert = true, RestoreIdentifier = "myRestoreIdentifier" });

NSUuid[] arr = { new NSUuid("7e9002be-547f-42bc-8d56-209736f70aa2") }; //Sound core mini

var devices = centralmanager.retrieveperipheralswithidentifiers(arr);
peripheral = devices.firstordefault();

//is the only way to trigger the events, we need to first connect the peripheral to central manager???
centralManager.connectPeripheral(peripheral, new PeripheralConnectionOptions
{
NotifyOnConnection = true,
NotifyOnDisconnection = true,
NotifyOnNotification = true
});

}

//Always is triggered inclusive in background
public override void UpdatedState(CBCentralManager central)
{
System.Diagnostics.Debug.WriteLine("BTCentralManager::UpdatedState > " + central.State.ToString());
}

//Only is triggered when the device is first time connected ( Inclusive in background)
public override void ConnectedPeripheral(CBCentralManager central, CBPeripheral peripheral)
{
System.Diagnostics.Debug.WriteLine("BTCentralManager::ConnectedPeripheral > " + peripheral.Name);

//After the connect made successfully I receive this error, and never connect again to the device
//Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us."
}

public override void DisconnectedPeripheral(CBCentralManager central, CBPeripheral peripheral, NSError error)
{
System.Diagnostics.Debug.WriteLine("BTCentralManager::DisconnectedPeripheral > " + peripheral.Name + " ERROR>" + error.Description);
}

public override void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{
System.Diagnostics.Debug.WriteLine("BTCentralManager::DiscoveredPeripheral > " + peripheral.Name);
// base.DiscoveredPeripheral(central, peripheral, advertisementData, RSSI);
}
}

最佳答案

据我了解你的问题,你需要观察蓝牙音频设备的可用性。前几次我对此进行了一些调查,结果并不真正令我满意。这是我的结论:

1.) CoreBluetooth 旨在仅用于蓝牙 4.0/蓝牙低功耗设备。许多蓝牙耳机甚至汽车 radio 仍然不是蓝牙 4.x。因此,除非您可以依赖用户的蓝牙音频设备为 4.x,否则 CoreBluetooth 可能是在浪费时间。

2.) 当您的应用程序处于后台时,您的应用程序不会收到有关音频设备正在连接的通知。

到目前为止还不好。但是,可能有一些方法可能会有所帮助。

1.) 通过使用 CLLocationManager,您可以开始观察,例如指南针(不是节省电池的位置)在手机被移动时得到通知。当应用程序调用 CLLocationManagerDelegate 时,只需检查连接的音频设备。这当然不是很有效,但它可能会起作用。

2.) 如果可用,使用 iBeacons 和 CLBeaconRegions。在用户的汽车中放置一个 iBeacon 并开始观察信标。

我知道,这不是您想听到的,但恐怕您的问题没有直接的解决方案。

干杯,彼得

关于ios - 当 iOS 应用程序在 Xamarin 中作为后台时,如何通知我蓝牙连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618159/

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