2013-02-14 42 views
8

Điều này là dành cho một tinh chỉnh , vì vậy mục tiêu là thiết bị được bẻ khóa và không phải là cửa hàng ứng dụng. Tôi đã thử hooking các phương pháp khác nhau trong SBWiFiManager nhưng chúng được gọi khi cường độ wifi thay đổi (liên tục) hoặc sau khi khá chậm trễ sau khi mạng đã thay đổi.Thông báo trên iPhone khi thay đổi mạng wifi

Có cách nào khác để nhận thông báo (hoặc phương pháp khác để móc) đã thay đổi mạng wifi không?

Tôi biết bạn có thể nhận SSID hiện tại với API công khai ngay bây giờ, nhưng tôi cần được thông báo khi thay đổi.

+0

+1 để viết một chỉnh sửa jailbreak! – Anil

Trả lời

14

Một cách để thực hiện điều này là lắng nghe sự kiện com.apple.system.config.network_change từ trung tâm thông báo của Core Foundation Darwin.

Đăng ký cho sự kiện:

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center 
           NULL, // observer 
           onNotifyCallback, // callback 
           CFSTR("com.apple.system.config.network_change"), // event name 
           NULL, // object 
           CFNotificationSuspensionBehaviorDeliverImmediately); 

Dưới đây là một callback mẫu:

static void onNotifyCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    NSString* notifyName = (NSString*)name; 
    // this check should really only be necessary if you reuse this one callback method 
    // for multiple Darwin notification events 
    if ([notifyName isEqualToString:@"com.apple.system.config.network_change"]) { 
     // use the Captive Network API to get more information at this point 
     // https://stackoverflow.com/a/4714842/119114 
    } else { 
     NSLog(@"intercepted %@", notifyName); 
    } 
} 

Xem my link to another answer về cách sử dụng API Captive Mạng để có được SSID hiện tại, ví dụ.

Lưu ý rằng mặc dù điện thoại tôi đã thử nghiệm này được jailbroken (iOS 6.1), tôi không nghĩ rằng điều này đòi hỏi phải jailbreaking để hoạt động chính xác. Nó chắc chắn không yêu cầu ứng dụng đang được cài đặt bên ngoài khu vực hộp cát thông thường (/var/mobile/Applications/*).

P.S. Tôi chưa thử nghiệm đầy đủ điều này để biết liệu sự kiện này có mang lại bất kỳ dương tính giả nào (dựa trên định nghĩa của bạn về thay đổi mạng) hay không. Tuy nhiên, nó đủ đơn giản để lưu trữ một số biến trạng thái, bằng SSID của mạng cuối cùng và so sánh với biến hiện tại, bất cứ khi nào sự kiện này xuất hiện.

+0

Cảm ơn bạn !!! (Btw Tôi chỉ cần đặt bit về jailbreak để ngăn chặn mọi người nói rằng nó sẽ bị từ chối bởi AppStore). Trong tò mò, bạn đã tìm thấy tên của thông báo như thế nào? –

+3

@ Jonathan, bạn có thể đặt một câu hỏi mới, hỏi về kỹ thuật chung được sử dụng để xác định thông báo nào được sử dụng không? Tôi hỏi, không chỉ vì tôi muốn tìm ra một vài điểm đại diện, nhưng vì (a) tôi không thể trả lời câu trả lời, và (b) nó sẽ hữu ích hơn (và có thể tìm kiếm được) cho người khác nếu câu hỏi phù hợp với tiêu đề, được gắn thẻ và mô tả. Nhận xét không tốt cho nhiều hơn chỉ là phản hồi ngắn. Bạn chắc chắn có thể * liên kết * với câu hỏi này như một ví dụ * cụ thể * của một lý do như vậy để có những kỹ thuật này. – Nate

Các vấn đề liên quan