在iOS上检测飞行模式

2020/12/01 07:22 · ios ·  · 0评论

如何检测手机是否处于飞行模式?(仅检测到没有互联网连接是不够的,我必须能够区分这两种情况)

尝试使用SCNetworkReachabilityGetFlags(系统配置框架)。如果退回的flags变量为0并且返回值为YES,则飞行模式已打开。

查看Apple的可达性课程

您可以在Info.plist中添加设置为true的SBUsesNetwork布尔标志,以显示在飞行模式下在邮件中使用的弹出窗口。

对于越狱的调整/应用程序:

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

...

bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];

如果不使用私有库,我们将无法获得此信息。这是一些代码,但是当载波信号不可用时,它将不起作用。

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");
  }

从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]

本文地址:http://ios.askforanswer.com/zaiiosshangjiancefeixingmoshi.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!