cat*_*eof 8 iphone reachability ios
我的应用程序(它是一个应用程序商店应用程序)能够通过3G/4G/LTE/Edge等连接......但它无法实时检测(通过回调或许)信号强度已被修改.例如:如果我连接4G并且我处于信号为EDGE或2G的"角落",我想禁用某些功能.此外,我想重新启用功能,信号再次成为4G.
我已经看过CTTelephonyNetworkInfo该类,并且SDK中也提供了这些值
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyGPRS __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyEdge __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyWCDMA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSDPA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSUPA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMA1x __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORev0 __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevB __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyeHRPD __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyLTE __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
Run Code Online (Sandbox Code Playgroud)
但是,如果其中一个值处于活动状态,应用程序如何收到通知.我有一些从CTTelephoneNetworkInfo读取的代码,我收回的值是正确的,但这是在我手动调用方法时完成的.
为了检测我使用的蜂窝信号功率CTRadioAccessTechnologyDidChangeNotification.
你可以试试这段代码:
import CoreTelephony
private var info: CTTelephonyNetworkInfo!
func createObserver() {
self.info = CTTelephonyNetworkInfo();
NSNotificationCenter.defaultCenter().addObserver(self, selector: "currentAccessTechnologyDidChange",
name: CTRadioAccessTechnologyDidChangeNotification, object: self.observerObject)
}
func currentAccessTechnologyDidChange() {
if let currentAccess = self.info.currentRadioAccessTechnology {
switch currentAccess {
case CTRadioAccessTechnologyGPRS:
print("GPRS")
case CTRadioAccessTechnologyEdge:
print("EDGE")
case CTRadioAccessTechnologyWCDMA:
print("WCDMA")
case CTRadioAccessTechnologyHSDPA:
print("HSDPA")
case CTRadioAccessTechnologyHSUPA:
print("HSUPA")
case CTRadioAccessTechnologyCDMA1x:
print("CDMA1x")
case CTRadioAccessTechnologyCDMAEVDORev0:
print("CDMAEVDORev0")
case CTRadioAccessTechnologyCDMAEVDORevA:
print("CDMAEVDORevA")
case CTRadioAccessTechnologyCDMAEVDORevB:
print("CDMAEVDORevB")
case CTRadioAccessTechnologyeHRPD:
print("HRPD")
case CTRadioAccessTechnologyLTE:
print("LTE")
default:
print("DEF")
}
} else {
print("Current Access technology is NIL")
}
}
Run Code Online (Sandbox Code Playgroud)
我通过打开/关闭飞机模式在我的iphone上测试了它,我注意到有时我需要等待一段时间才能通知.因此,在您的情况下,可能会更好的方式被调用info.currentRadioAccessTechnology并在需要时获得结果.当然,记得在你不再需要它时删除观察者.
关于此的Apple文档:
currentRadioAccessTechnology讨论:设备注册的当前无线电接入技术.可能是NULL设备未在任何网络上注册.
另外,我做了一些研究,我找到了一个可能对你有帮助的有趣答案.
简单的Obj-C版本:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
CTTelephonyNetworkInfo *ctInfo = [CTTelephonyNetworkInfo new];
[[NSNotificationCenter defaultCenter] addObserverForName:CTRadioAccessTechnologyDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
NSLog(@"current access radio access did change to : %@", ctInfo.currentRadioAccessTechnology);
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |