ios - 我可以检测到导致 "applicationWillResignActive"调用的原因吗?

标签 ios background multitasking

我知道当您点击主页按钮或 sleep /唤醒按钮时会调用“applicationWillResignActive”。当发生中断(如本地调用)时也会调用它。但是我怎样才能确定哪种方法导致了这种方法并做一些不同的实现呢?

最佳答案

您无法直接找出所有原因,但可以稍微缩小范围。

如果按下主页按钮并将应用程序发送到后台,您的应用程序将收到 applicationDidEnterBackground:调用你的 UIApplicationDelegate。请注意,您将在 applicationWillResignActive: 之后收到此信息。打电话,所以它可能对你没有帮助。

您还可以为音频中断注册一个监听器

AudioSessionInitialize (
                        NULL,                          // 'NULL' to use the default (main) run loop
                        NULL,                          // 'NULL' to use the default run loop mode
                        audioSessionInteruptionListener,  // a reference to your interruption callback
                        self                       // data to pass to your interruption listener callback
                        );

如果 audioSessionInteruptionListener被调用,状态为 kAudioSessionBeginInterruption之前 applicationWillResignActive: ,则您知道中断是由电话或警报引起的。我认为您无法获得更多信息。

编辑

实际上,我认为您可以走得更远一点,确定电话与警报中断。现在这个还没有经过测试,只是为了给更多的调查提供一个起点。

我记得注册了一个回调来捕获音频路由,当接到电话时,路由的音频从扬声器/耳机更改为无到接收器。所以我想你可以使用上面描述的方法捕获 AudioInterruption,并捕获音频路由变化。如果音频路由成为接收者,则中断是一个电话调用。否则,它就是别的东西,比如警报。

我的目标是 iOS 5.0,因此它可能不适用于以前的版本,您必须与文档确认。

关于ios - 我可以检测到导致 "applicationWillResignActive"调用的原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915455/

相关文章:

ios - 如果可用,请在 Facebook 应用程序中打开链接

ios - Facebook 图形 API 浏览器 : get friends of friends

android - 为什么我的应用程序启动后,WorkManager会多次触发?

java - 在 Android 中打开 Fragment 时使完整背景变暗

objective-c - 防止 iOS NSTimers 在后台被杀死的技术

ios - 当 View 当前不可见时更改 Collection View 的滚动位置

java - 为什么java后台进程很慢?

c# - 在另一个任务中启动任务会重复我的 WebRequest

ios - 检测应用程序何时从锁定屏幕与 iOS 7 上的其他屏幕激活

ios - 图像中的 Bootstrap Modal 在 iOS 中不起作用