2011-01-26 44 views
49

Làm cách nào để phát hiện xem điện thoại có đang ở chế độ trên máy bay không? (Không đủ để phát hiện không có kết nối internet, tôi phải có khả năng phân biệt 2 trường hợp này)Phát hiện chế độ trên máy bay trên iOS

+6

Bạn có giải thích lý do tại sao ** ** bạn cần phải phân biệt hai trường hợp này? Sự khác biệt gì nếu người dùng không có kết nối vì phạm vi phủ sóng hoặc không có kết nối vì chế độ trên máy bay? – Jasarien

+12

Do đó, chúng tôi có thể phân biệt điều này trên các nền tảng di động khác và chúng tôi muốn có cùng chức năng trên nền tảng càng nhiều càng tốt. Chúng tôi hiển thị các thông báo trạng thái khác nhau tùy thuộc vào điều này và chúng tôi cố gắng hướng dẫn người dùng khắc phục sự cố. – Caner

+7

Tôi biết đây là một câu hỏi cũ, nhưng chỉ để làm rõ nhu cầu 'tình huống cực kỳ hẹp' này: Khi iPhone ở chế độ trên máy bay, vị trí GPS cực kỳ không đáng tin cậy, nhưng không gây ra lỗi. Tôi đã đăng ký sự kiện GPS và để ứng dụng của tôi chạy trong 2 giờ. Không có lỗi, không có vị trí gps và tất cả các kiểm tra cho 'có thể nhận được sự kiện vị trí' trả về CÓ. Tuy nhiên, vô hiệu hóa 3g và wifi bằng tay đã cho tôi NO cho nội bộ 'có thể nhận được vị trí' kiểm tra. Có chắc chắn là một nhu cầu phát hiện chế độ máy bay một cách rõ ràng như trái ngược với một kiểm tra khả năng tiếp cận chung. – Owen

Trả lời

18

Thử sử dụng SCNetworkReachabilityGetFlags (Khung cấu hình hệ thống). Nếu biến cờ được trao lại là 0 và giá trị trả về là CÓ, chế độ trên máy bay được bật.

Kiểm tra Apple Reachability classes.

+5

Xin chào, giá trị trả về là CÓ và tôi nhận được không ở cả hai tình huống sau: 1) Wifi bị tắt khỏi cài đặt và không có thẻ sim trong điện thoại 2) chế độ trên máy bay. Rất tiếc, đề xuất của bạn không giải quyết được vấn đề của tôi. – Caner

+0

không phải là trạng thái khả năng hiển thị giống nhau trong cả hai trường hợp? được rồi, trạng thái bluetooth có thể khác. – Felix

5

Bạn có thể thêm cờ boolean SBUsesNetwork được đặt thành true trong Info.plist của bạn để hiển thị cửa sổ bật lên được sử dụng trong Thư khi ở Chế độ trên máy bay.

+12

NGOẠI TRỪ rằng điều này là không có giấy tờ và có thể vi phạm trong bản phát hành iOS trong tương lai. –

1

Chúng tôi không thể nhận được thông tin này mà không sử dụng thư viện riêng. Đây là một số mã nhưng nó sẽ không hoạt động khi tín hiệu sóng mang không có sẵn.

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 

NSString *dataNetworkItemView = nil; 

for (id subview in subviews) { 
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) { 
      dataNetworkItemView = subview; 
      break; 
    } 
} 
double signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue]; 
if (signalStrength > 0) { 
     NSLog(@"Airplane mode or NO signal"); 
    } 
    else{ 
     NSLog(@"signal available"); 
    } 
1

Đối chỉnh jailbreak/apps:

@interface SBTelephonyManager : NSObject 
+(id)sharedTelephonyManager; 
-(BOOL)isInAirplaneMode; 
@end 

... 

bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode]; 
Các vấn đề liên quan