场景描述:
- 在“设置 -> 蜂窝移动网络”页面中,可以看到手机上所有使用网络的应用,并且可以针对任意一个应用关闭/开启蜂窝移动网络。
- 如果你不小心关闭了某个应用的蜂窝移动网络,系统会在下次打开应用的时候弹出提示(在关闭后,只会提示一次。如果重新打开再关闭,会再提示一次),如下图。如果此刻你选择了好,而且在过段时间忘记了这件事情,又没有连接WiFi。那么,可能会出现只有这个APP没有网络,其他的APP都是正常的,这时你肯定会觉得这是这个APP的问题。
解决办法:
- 使用CTCellularData检测你的APP的蜂窝移动网络权限是否被关闭。
- 在需要检测的地方引入
#import <CoreTelephony/CTCellularData.h>
- 两种方法:
方法1:(APP启动时就开始监听)
CTCellularData *cellularData = [[CTCellularData alloc] init];
// 状态发生变化时调用
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState restrictedState) {
switch (restrictedState) {
case kCTCellularDataRestrictedStateUnknown:
NSLog(@"蜂窝移动网络状态:未知");
break;
case kCTCellularDataRestricted:
NSLog(@"蜂窝移动网络状态:关闭");
break;
case kCTCellularDataNotRestricted:
NSLog(@"蜂窝移动网络状态:开启");
break;
default:
break;
}
};
// 方法2:(在需要用到的地方获取)
#pragma mark 获取蜂窝移动数据限制状态
/*
kCTCellularDataRestrictedStateUnknown, // 未知
kCTCellularDataRestricted, // 关闭
kCTCellularDataNotRestricted // 开启
*/
+ (CTCellularDataRestrictedState)getCellularDataRestrictionState {
CTCellularData *cellularData = [[CTCellularData alloc] init];
CTCellularDataRestrictedState restrictedState = cellularData.restrictedState;
return restrictedState;
}
- 两种方法的比较
- 方法1:蜂窝移动数据状态发生变化时会触发这个方法。关闭时状态为kCTCellularDataRestricted,开始时状态为kCTCellularDataNotRestricted。这里有一点要注意:测试时发现,当改变其他应用的蜂窝移动数据状态时,也会触发这个应用的此方法。
- 方法2:无论此应用的蜂窝移动数据是开启或关闭状态,此方法获取到的状态一直是kCTCellularDataRestrictedStateUnknown(不知道是不是我写的方法有问题,如果有知道的请在下方评论留言,谢谢)
- 说明:此方法只是用于获取某个应用的蜂窝移动数据的开启/关闭状态,与是否连接WiFi无关。