在 iOS 8.3 上获取 CellID、LAC、...

Posted

技术标签:

【中文标题】在 iOS 8.3 上获取 CellID、LAC、...【英文标题】:Get CellID, LAC, ... on iOS 8.3 【发布时间】:2015-06-14 11:56:49 【问题描述】:

ios 5.X 开始,我使用这些方法获取电台信息:Get CellID, MCC, MNC, LAC, and Network in iOS 5.1

但是对于 iOS 8.3 beta(和 8.3 GM),这个私有 API

_CTServerConnectionCellMonitorCopyCellInfo

不再起作用了。

【问题讨论】:

【参考方案1】:

Apple 被告知其 CoreTelephony 存在弱点,因此现在调用 CoreTelephony 失败。他们正在检查调用者是否被沙盒,所以调试后你可以看到:

Caller not allowed to perform action: TelephonyApiTest.240, action = sandboxed lookup, code = 1: Operation not permitted, uid = 501, euid = 501, gid = 501, egid = 501, asid = 0

但是,仍然有少数调用有效,例如:

_CTServerConnectionCopyWakeReason
_CTServerConnectionCopyVoiceMailInfo

等等……我都没有试过。

现在最大的问题是你甚至无法获得信号强度,因为CTGetSignalStrength 总是返回 0。

当您尝试像您的案例 _CTServerConnectionCellMonitorCopyCellInfo 那样进行一些限制调用时,您会看到 CTError 中的错误代码为 13(权限被拒绝)

【讨论】:

【参考方案2】:

从 iOS 8.3 开始,上述所有解决方案都需要授权才能工作

    <key>com.apple.CommCenter.fine-grained</key>
<array>
    <string>spi</string>
</array>

不仅手机监视器受到保护,而且似乎所有 CoreTelephony 通知现在都需要该权利才能工作。例如,kCTMessageReceivedNotification 也会受到影响。

【讨论】:

以上是关于在 iOS 8.3 上获取 CellID、LAC、...的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cell Tower 的 Android 位置

Apple 在 iOS CoreLocation API 中查询啥 CellID 数据库?

python中的gsm位置

在Blackberry 5.0中通过cellID获取位置

自动布局在 ios 8.3 上无法正常工作

iOS15.1 UITableViewCell 错乱问题