在 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、...的主要内容,如果未能解决你的问题,请参考以下文章