2015-04-07 17 views
9

Có cách nào để phát hiện xem wifi có được bật trên iPhone/iPad không?Phát hiện nếu wifi được bật

Tôi không quan tâm để xem tôi có thể truy cập Internet hay không, vì tôi sử dụng lớp Khả năng hiển thị. Tôi chỉ cần biết nếu wifi đã được kích hoạt trên thiết bị.

Biết ơn mọi mẹo.

+2

Bằng cách mã hóa. Bạn đã thử cái gì? @Jorgen – dnuka

+1

Các liên kết này có thể giúp em- http://stackoverflow.com/questions/12906171/iphone-wifi-on-or-off http://stackoverflow.com/questions/7975727/ how-to-check-if-wifi-option-enabled-hay-không –

+1

Nếu bạn đang sử dụng lớp Khả năng tiếp cận, loại lớp học nào? Đây có phải là dự án Reachability từ github không? Bởi vì nó cũng có thể phát hiện loại kết nối nào có sẵn. Ngoài ra, hãy cung cấp cho chúng tôi thêm mã để chúng tôi có thể xem những gì bạn đã thử? –

Trả lời

4

Có lẽ đây là những gì bạn đang tìm kiếm:

DEAD LINK: http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

Wayback Lưu trữ máy: https://web.archive.org/web/20161114213529/http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

Không có một khuôn khổ cho những gì bạn muốn làm, nhưng có một thủ thuật có thể hoạt động. Nếu bạn liệt kê các giao diện có sẵn, sẽ có một số giao diện mà chỉ xuất hiện khi wifi được bật (và một số chỉ xuất hiện khi bạn đang kết nối một Bạn có thể liệt kê các giao diện như thế này:.

struct ifaddrs *interfaces; 

if(!getifaddrs(&interfaces)) { 
    for(struct ifaddrs *interface = interfaces; interface; interface=interface->ifa_next) { 
     BOOL up = (interface->ifa_flags & IFF_UP) == IFF_UP; 
     if (up) { 
      NSLog(
       @"Name : %s, sa_family : %d", 
       interface->ifa_name, 
       interface->ifa_addr->sa_family 
      ); 
     } 
    } 
} 

Output với wifi off:

Name : lo0, sa_family : 18 
Name : lo0, sa_family : 30 
Name : lo0, sa_family : 2 
Name : lo0, sa_family : 30 
Name : pdp_ip0, sa_family : 18 
Name : pdp_ip0, sa_family : 2 
Name : en0, sa_family : 18 
Name : awdl0, sa_family : 18 

đầu ra với wifi trên:

Name : lo0, sa_family : 18 
Name : lo0, sa_family : 30 
Name : lo0, sa_family : 2 
Name : lo0, sa_family : 30 
Name : pdp_ip0, sa_family : 18 
Name : pdp_ip0, sa_family : 2 
Name : en0, sa_family : 18 
Name : awdl0, sa_family : 18 
Name : awdl0, sa_family : 30 

đầu ra với wifi và kết nối:

Name : lo0, sa_family : 18 
Name : lo0, sa_family : 30 
Name : lo0, sa_family : 2 
Name : lo0, sa_family : 30 
Name : pdp_ip0, sa_family : 18 
Name : pdp_ip0, sa_family : 2 
Name : en0, sa_family : 18 
Name : en0, sa_family : 30 
Name : en0, sa_family : 2 
Name : awdl0, sa_family : 18 
Name : awdl0, sa_family : 30 

Nếu bạn khám phá cấu trúc ifaddrs, bạn cũng sẽ tìm thấy BSSID/SSID của mạng được kết nối.

+0

Liên kết thú vị! –

+0

Tôi khuyên bạn nên đọc các nhận xét trên liên kết đó, đặc biệt là những lời nói về hỗ trợ. Theo những người, điều này không hoạt động trên iPhone 4s và iPad 1 Gen. Tôi nghĩ đó là bởi vì những thiết bị đó không hỗ trợ Wi-Fi Direct, và như vậy không có giao diện như vậy –

+0

Hãy xem https://github.com/alirp88/SMTWiFiStatus –

1

Có một số câu hỏi đề cập đến cùng một chủ đề. Bạn đã thử this code from Apple?

@property (retain, nonatomic) Reachability* reach; 

self.reach = [Reachability reachabilityForInternetConnection]; //retain reach 
[self.reach startNotifier]; 

NetworkStatus remoteHostStatus = [self.reach currentReachabilityStatus]; 

if(remoteHostStatus == NotReachable) {NSLog(@"init **** Not Reachable ****");} 
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"int **** wifi ****"); } 
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"init **** cell ****"); } 
0

project on github.. Nhập khẩu bên trong dự án của bạn, bạn có thể kiểm tra kết nối như thế này:

Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 

NetworkStatus status = [reachability currentReachabilityStatus]; 

if(status == NotReachable) 
{ 
    //No internet 
} 
else if (status == ReachableViaWiFi) 
{ 
    //WiFi 
} 
else if (status == ReachableViaWWAN) 
{ 
    //3G 
} 

The code from here.

+1

Cảm ơn, nhưng tôi không muốn xem liệu nó có được kết nối với Internet hay không, chỉ khi bật wifi. – Jorgen

+0

Hơn bạn sẽ cần phải kiểm tra liên kết @gbuzogany! Nó phức tạp hơn nhưng phải là con đường để đi. –

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