CTTelephonyCenterAddObserver不通知接收短信

时间:2014-11-14 15:04:56

标签: ios ios8 jailbreak core-telephony

我有一个应用程序,我想在收到短信时做出反应;直到iOS 7,这通过向CTTelephonyCenter注册如下:

        id center = CTTelephonyCenterGetDefault();
        CTTelephonyCenterAddObserver(center,
                                     NULL,
                                     callback,
                                     NULL,
                                     NULL,
                                     CFNotificationSuspensionBehaviorHold);

并在kCTMessageReceivedNotification的回调检查中。这在iOS 8中不再起作用,因为我收到的通知类型远少于iOS 7,并且没有与消息接收有关。 我认为这是关于一项新的权利,但如果是这样的话,还无法确定,以及所需的权利是多少。有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

您需要在第四个参数中指定通知名称:

id center = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(center,
                             NULL,
                             callback,
                             CFSTR("kCTMessageReceivedNotification"),
                             NULL,
                             CFNotificationSuspensionBehaviorHold);

从iOS 8开始,您无法传递NULL作为通知名称来接收所有CoreTelephony通知。现在您必须确切地告诉它您要观察哪些通知。

8.3更新

从iOS 8.3开始,至少kCTMessageReceivedNotification需要接收权利(可能是所有通知的情况,但不确定)

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

答案 1 :(得分:2)

自iOS 8.3起,CTTelephonyCenterAddObserver不再工作。