bha*_*tti 30 iphone cocoa-touch objective-c ios
我正在为iOS开发一个非appstore应用程序.我想在我的代码中读取蜂窝信号强度.
我知道Apple没有提供任何我们可以实现此目的的API.
是否有可用于实现此目的的私有API?我已经完成了关于这个问题的各种线索,但找不到任何相关信息.
这是完全可能的,因为app-store中有一个应用程序用于检测运营商的信号强度.
vua*_*thu 14
获取signalStreght IOS9:
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;
}
}
int signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue];
NSLog(@"signal %d", signalStrength);
Run Code Online (Sandbox Code Playgroud)
Mic*_*ner 10
这不是很难.
码:
int CTGetSignalStrength(); // private method (not in the header) of Core Telephony
- (void)aScanMethod
{
NSLog(@"%d", CTGetSignalStrength()); // or do what you want
}
Run Code Online (Sandbox Code Playgroud)
你完成了.
2016年5月更新
Apple取消了这个机会.
我简要地看了一下位于Github的VAFieldTest项目.
在Classes/VAFieldTestViewController.m中似乎有 getSignalStrength()和register_notification()函数可能会让你感兴趣CoreTelephony.framework.
我非常有信心,一些使用过的调用在Apple的CoreTelephony框架文档中没有记录,因此是私有的 - AppStore中的任何应用程序都必须通过检查.
要在Swift 3中获得iOS 9或更高版本的信号,而不使用CoreTelephony的私有API - CTGetSignalStrength().只是搜索statusBar视图.
func getSignalStrength() -> Int {
let application = UIApplication.shared
let statusBarView = application.value(forKey: "statusBar") as! UIView
let foregroundView = statusBarView.value(forKey: "foregroundView") as! UIView
let foregroundViewSubviews = foregroundView.subviews
var dataNetworkItemView:UIView!
for subview in foregroundViewSubviews {
if subview.isKind(of: NSClassFromString("UIStatusBarSignalStrengthItemView")!) {
dataNetworkItemView = subview
break
} else {
return 0 //NO SERVICE
}
}
return dataNetworkItemView.value(forKey: "signalStrengthBars") as! Int
}
Run Code Online (Sandbox Code Playgroud)
注意:如果状态栏被隐藏,键"statusBar"将返回nil.
| 归档时间: |
|
| 查看次数: |
32072 次 |
| 最近记录: |