gpt4 book ai didi

ios - 断开 Wi-Fi 网络时如何在后台获取 iOS 中的可达性通知?

转载 作者:IT王子 更新时间:2023-10-29 07:58:04 25 4
gpt4 key购买 nike

我正在使用 Reachability 成功地确定网络状态,并收到更改通知(例如 Reachability Guide for iOS 4 )。

我的问题不是如何启动和运行 Reachability,而是以下问题。

我的 AppDelegate 处理 Reachability 的东西。应用在运行时以及在后台运行时 (applicationDidEnterBackground:) 会收到通知 (kReachabilityChangedNotification)。

该应用旨在在发现 Wi-Fi 连接断开时重新加载正在播放的音频流,例如为了进行测试,我在“设置”中打开和关闭 Wi-Fi,一切正常。在实际测试中,当我离开接入点范围时,我经常会失去 Wi-Fi 连接。我发现 Reachability 在这种情况下对我帮助不大。我不确定是不是因为在屏幕锁定时无法通过可达性通知,或者是否可达性无法处理来自距离越来越远的 Wi-Fi 接入点的信号缓慢减弱,但无论如何我都想不通找出为什么现实世界的测试与理想情况不符。

这就是我的代码的样子。我首先设置接收通知,然后开始收听 Reachability:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];

// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];

....

return YES;
}

然后,这是响应连接变化的函数:

- (void)checkNetworkStatus:(NSNotification *)notice {
// called after network status changes

NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}

即使应用程序处于后台,通知也会发出,但在上述实际测试中不会发出。

感谢您的帮助。

最佳答案

默认情况下,应用程序只会在后台状态停留很短的时间,大多数应用程序会在不久之后进入暂停状态。这意味着应用程序在后台但不执行代码。因此,您自定义实现的通知不起作用。必须在应用委托(delegate)方法中的唤醒时间重新查询 NetworkReachability:

applicationWillEnterForeground:
applicationDidBecomeActive

关于ios - 断开 Wi-Fi 网络时如何在后台获取 iOS 中的可达性通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810585/

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