gpt4 book ai didi

iphone - 准确读取iPhone信号强度

转载 作者:太空狗 更新时间:2023-10-30 03:26:05 25 4
gpt4 key购买 nike

已经有一些关于此的问题,但其中似乎没有提供准确的结果。我需要简单地确定手机是否在给定时刻连接到手机网络。

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/CTCarrier/Reference/Reference.html

此类的记录似乎不正确,在手机未安装 SIM 的情况下返回 mobileCountryCode、isoCountryCode 和 mobileNetworkCode 的值。如果手机已解锁,carrierName 表示“家庭”网络或以前的家庭网络。

我还查了一下,发现有人声称以下方法有效,它使用了 CoreTelephony 框架的一种未记录的方法,但结果对我来说毫无用处,报告看似随机的数字,也许它本身并没有持续更新。

-(int) getSignalStrength
{
void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
int (*CTGetSignalStrength)();
CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength");
if( CTGetSignalStrength == NULL) NSLog(@"Could not find CTGetSignalStrength");
int result CTGetSignalStrength();
dlclose(libHandle);
return result;
}

谢谢。

编辑:该应用已连接到内部 wifi,并且必须保持连接状态,这使得可达性检查变得更加困难。

最佳答案

我正在玩这个函数,我注意到你以一种有趣的方式调用它。我通过添加 CoreTelephony.framework 作为编译时链接来调用它。对于函数本身,您需要在某处声明它的原型(prototype)(可能就在您调用的方法上方):

int CTGetSignalStrength();

这需要声明,因为它不在 CoreTelephony 的公共(public) header 中。

现在,我构建了一个每秒打印信号强度的简单应用。

int CTGetSignalStrength();

- (void)viewDidLoad
{
[super viewDidLoad];

while (true) {
printf("signal strength: %d\n", CTGetSignalStrength());
sleep(1);
}
}

我在我的 iPad mini 上运行它,它显示稳定的值,直到我拿起它,数字才开始上升。用锡纸包裹我的 iPad(锡纸是我以前从未使用过的调试工具)导致数字下降。当我将我的 iPad 置于飞行模式时,它会不断重复上一个值,因此这对您来说不是一个准确的测量值。

如果您想测试设备当前是否具有蜂窝数据网络连接,您可能对 Reachability 更感兴趣,特别是 kSCNetworkReachabilityFlagsIsWWAN

关于iphone - 准确读取iPhone信号强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com