菜鸟教程小白 发表于 2022-12-13 11:20:09

ios - 核心蓝牙 : testing state preservation and restoration


                                            <p><p>我正在使用 Xcode 7,我想了解如何使用 BLE 附件和 CoreBluetooth 框架在 iOS9 中测试“状态保存和恢复”(请不要说我已经找到了 <a href="https://stackoverflow.com/questions/27797665/ios-corebluetooth-state-preservation-and-restoration" rel="noreferrer noopener nofollow">this question</a>,但我觉得有必要更深入地了解这一点)。</p>

<p>只有当用户的手机在范围内时,我才需要应用程序自动从配件传输一些数据,以防应用程序之前没有运行。</p>

<p>我试图将其分解为反射(reflect)此用例不同变化的三个场景,即场景 A、场景 B 和场景 C。</p>

<p><strong>有人能解释一下测试以下场景所需的基本步骤吗?</strong></p>

<p><strong>这些场景也有意义吗?</strong></p>

<ul>
<li><p>场景A:</p>

<p>1 - 应用发现配件并存储配件信息</p>

<p>2 - 应用/用户退出附件范围</p>

<p>3 - 应用被用户杀死</p>

<p>4 - 用户在应用未运行时重新进入附件范围。</p>

<p>5 - 预期事件:我希望激活状态恢复(在 CentralManager 中调用 <strong>willRestoreState</strong> 方法以及在 AppDelegate 中调用 <strong>didFinishLaunchingWithOptions</strong>。</p>

<p>从这里我应该能够获取包括附件在内的外围设备列表并决定是否要连接到它。</p>

<p>6 - 如果我决定连接,那么我希望应用程序继续在后台运行(因为激活了后台模式)。 </p></li>
</ul>

<p>如何测试这种情况? </p>

<hr/>

<ul>
<li><p>场景 B:</p>

<p>1 - 应用发现配件并存储配件信息</p>

<p>2 - 应用程序连接到附件并向特征发送请求以开始传输数据</p>

<p>3 - 应用正在从附件接收数据</p>

<p>4 - 应用/用户退出附件范围</p>

<p>5 - 应用进入后台模式</p>

<p>6 - 当应用程序在后台模式下运行时,用户重新进入附件范围。</p>

<p>5 - 预期事件:我希望激活状态恢复(在 CentralManager 中调用 <strong>willRestoreState</strong> 方法以及在 AppDelegate 中调用 <strong>didFinishLaunchingWithOptions</strong>。</p>

<p>从这里我应该能够获取包括附件在内的外围设备列表,并看到状态为 <strong>CONNECTED</strong>。然后我应该重新请求数据流(我假设没有办法恢复上一个流,对吗?)</p>

<p>6 - 应用应该在后台继续流式传输</p></li>
</ul>

<p>如何测试这种情况? </p>

<hr/>

<ul>
<li><p>场景C:</p>

<p>1 - 应用发现配件并存储配件信息</p>

<p>2 - 应用程序连接到附件并向特征发送请求以开始传输数据</p>

<p>3 - 应用正在从附件接收数据</p>

<p>4 - 应用/用户退出附件范围</p>

<p>5 - 应用进入后台模式</p>

<p>6 - 用户终止应用</p>

<p>7 - 用户在应用未运行时重新进入配件范围</p>

<p>8 - 预期事件:我希望激活状态恢复(在 CentralManager 中调用 <strong>willRestoreState</strong> 方法以及在 AppDelegate 中调用 <strong>didFinishLaunchingWithOptions</strong>。</p>

<p>从这里我应该能够获取包括附件在内的外围设备列表并重新连接到它并重新请求数据传输(如方案 B 那样恢复)。</p>

<p>9 - 我希望应用程序继续在后台运行(因为激活了后台模式)并且应用程序应该在后台继续流式传输</p></li>
</ul>

<p>如何测试这种情况? </p>

<p>希望不会太困惑。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>对于场景 A,我怀疑你什么都做不了。如果用户通过双击主页按钮并向上滑动应用程序来终止您的应用程序,那么该应用程序就会消失并且不再参与所有这些花哨的蓝牙聊天。同样适用于从未启动的应用程序 - iOS 不会告诉它任何内容和/或尝试唤醒它。</p>

<p>在场景 B 中,您很可能不需要处理 <code>willRestoreState</code>,因为现代智能手机(5s、6)似乎不会杀死您暂停的应用,即使在最重要的是。当您离开配件范围时,该应用程序将安静地断开连接。然后,如果您指示它立即再次开始扫描附件(在 <code>didDisconnectPeripheral</code> 中),它会这样做很长时间。不是太频繁,但仍然如此。因此,当您再次进入配件范围时,iPhone 最终会连接到它并触发所有必需的回调。 <code>willRestoreState</code> 似乎只与 iPhone 4s 相关,也许是 iPhone 5,但为了绝对确定,我很久没有使用这个功能了。</p>

<p>如果你真的需要测试 <code>willRestoreState</code> 场景,你可以 A) 将本地通知添加到 <code>didFinishLaunchingWithOptions</code> 和 <code>willRestoreState</code> 以确保它们是触发和 B) 在 Xcode 中运行您的应用程序,然后按 CMD+ 停止它。或单击 Xcode 中的方形按钮。这将导致应用程序终止,就像系统会在内存问题上终止它一样,因此您应该会看到您的通知。从现在开始,您可以编写代码、添加日志语句并观察设备日志中发生的情况。</p>

<p>另一种测试状态恢复的方法是在点击按钮后调用 <code>kill(getpid(), SIGKILL);</code>。</p>

<p>场景 C - 对不起,同样的故事。如果用户故意杀死你的应用程序,你就完蛋了。告诉他不要。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心蓝牙 : testing state preservation and restoration,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33122242/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33122242/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心蓝牙 : testing state preservation and restoration