如何检测手机是否处于飞行模式? (仅仅检测到没有互联网连接是不够的,我必须能够区分这两种情况)
答案 0 :(得分:20)
尝试使用SCNetworkReachabilityGetFlags
(SystemConfiguration框架)。如果传回的flags变量为0且返回值为YES,则启用飞行模式。
查看Apple的Reachability classes。
答案 1 :(得分:5)
您可以在Info.plist中将SBUsesNetwork布尔标志设置为true,以显示在飞行模式下Mail中使用的弹出窗口。
答案 2 :(得分:2)
对于越狱调整/应用程序:
@interface SBTelephonyManager : NSObject
+(id)sharedTelephonyManager;
-(BOOL)isInAirplaneMode;
@end
...
bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];
答案 3 :(得分:1)
如果不使用私有库,我们无法获取此信息。这是一些代码,但是当载波信号不可用时它将不起作用。
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");
}
答案 4 :(得分:0)
自从iOS 12和网络框架以来,就可以通过某种方式检测飞行模式是否处于活动状态。
import Network
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
if path.availableInterfaces.count == 0 { print("Flight mode") }
print(path.availableInterfaces)
}
let queue = DispatchQueue.global(qos: .background)
monitor.start(queue: queue)
path.availableInterfaces
返回一个数组。例如[en0, pdp_ip0]
。如果没有可用的接口,则可能处于飞行模式。
警告
如果启用了飞行模式和wifi,则path.availableInterfaces
不为空,因为它返回了[en0]