Tôi đang sử dụng Khả năng hiển thị thành công để xác định trạng thái của mạng và được thông báo về các thay đổi (ví dụ: Reachability Guide for iOS 4).Làm cách nào để nhận Thông báo khả năng hiển thị trong iOS trong nền khi xóa mạng Wi-Fi?
Câu hỏi của tôi không phải là cách đạt được Khả năng hiển thị và chạy, mà đúng hơn là như sau.
My AppDelegate
xử lý nội dung Khả năng hiển thị. Ứng dụng nhận được thông báo (kReachabilityChangedNotification
) trong khi ứng dụng đang chạy và khi ứng dụng ở trong nền (applicationDidEnterBackground:
).
Ứng dụng được thiết kế để tải lại luồng âm thanh phát khi nhận thấy rằng nó bị mất kết nối Wi-Fi, ví dụ: Để kiểm tra, tôi bật và tắt Wi-Fi trong Cài đặt và mọi thứ hoạt động hoàn hảo. Trong thử nghiệm trong thế giới thực, tôi thường mất kết nối Wi-Fi khi tôi thoát khỏi phạm vi của điểm truy cập. Tôi đã thấy rằng Reachability không giúp tôi quá nhiều trong trường hợp này. Tôi không chắc liệu đó có phải là do thông báo khả năng hiển thị không đi qua khi màn hình bị khóa hoặc nếu khả năng hiển thị không xử lý tín hiệu giảm chậm từ điểm truy cập Wi-Fi ngày càng xa, nhưng bất kể tôi không thể hình tại sao thử nghiệm trong thế giới thực không phù hợp với trường hợp lý tưởng.
Đây là mã của tôi. đầu tiên tôi được thành lập để nhận thông báo, và bắt đầu nghe 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;
}
và sau đó, đây là chức năng mà phản ứng với những thay đổi về khả năng kết nối:
- (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;
}
}
}
Các thông báo đi qua ngay cả khi ứng dụng ở chế độ nền, nhưng chúng không có trong thử nghiệm trong thế giới thực được mô tả ở trên.
Cảm ơn bạn đã được trợ giúp.
Bạn đã thử kết hợp 'reachabilityForInternetConnection' và' reachabilityForLocalWifi' chưa? –
Bạn có tìm thấy giải pháp cho việc này không? Tôi đang gặp một vấn đề tương tự, và các giải pháp ở đây dường như không giúp đỡ hoặc không phải là những gì tôi đang tìm kiếm. – newenglander
Tôi không biết rằng tôi đã từng giải quyết vấn đề cụ thể của mình, vì gần đây tôi không cần phải làm việc với dự án đó. Bạn đã chắc chắn rằng ứng dụng đang chạy trong nền với một tác vụ nền, theo khuyến nghị của @ Hurden? –