我正在尝试在applicationWillResignActive
用户打开任务切换器期间运行一些代码,并且它运行良好,直到我开始在我的应用程序中使用蓝牙。
当蓝牙尝试连接到设备时,它会显示一个警告窗口,询问用户是否要配对设备。此警报足以触发该applicationWillResignActive
方法,然后在应用程序被导航离开时运行我的代码(任务切换器)。这会导致一个大问题,因为我打算在切换时运行的代码会关闭实际应用程序中一些非常需要的功能。因此,一旦他们在该警报上按下“配对”或“取消”,我的所有应用程序都会停止正常运行,因为该应用程序失去了焦点。
我试图在这段时间内检测应用程序的状态......NSUInteger state = [[UIApplication sharedApplication] applicationState];
当然,当警报弹出时它会被认为是活动的,而在任务切换器中它会被认为是非活动的。但是,情况并非如此,它在两个用例中都显示为活动状态。
更新#1
问题...
如何在应用程序中区分导致系统级非活动焦点状态的应用程序(如运行代码以连接到蓝牙)与用户导致系统级非活动焦点(如双击主页按钮)?一切都在努力区分导致该applicationWillResignActive
方法触发的原因。
更新#2
NSUserDefaults
此功能的目的是在蓝牙连接到设备时设置一个标志。该标志被“观察”并用于触发将视图控制器更改为与此新 BT 连接相关的页面。当用户双击主页按钮并移动到任务切换器时,我关闭 BT 并切换到 iBeacon,以便我可以通知事件。当前实现所有 bar 1 用例都很好。
如果用户尚未连接到 BT 设备并且它是第一次连接并且出现配对警报,它会触发该applicationWillResignActive
方法,就像双击主页按钮一样。在此方法中,代码然后检查该NSUserDefaults
标志以查看它是否打开(此时这是因为 BT 已经到达CBCentralManager
'didConnectPeripheral
方法并打开它),如果它打开,它会关闭 BT 并切换到扫描 iBeacon。因为该应用程序仍处于打开状态,这显然会导致问题。该应用程序正在运行,因此用户看到 BT 连接,新视图滑入,配对警报出现,然后新视图滑出,iBeacon 开始发送通知,供用户在任务切换器中使用。
我已经在applicationWillEnterBackground
方法中发生了这个确切的功能,所以这不是答案。我需要有一种方式说“应用程序正在运行,我们收到了警报而不是双击主页,所以请不要关闭 BT 并打开 iBeacon”