4

我在问这个问题之前搜索了 SO,没有满足我需求的答案。

所以这是我的要求,

我有这段代码用于检测传入的 SMS,但它没有说明如何转储这些消息。我已成功阻止来电,但对于消息我不知道该怎么做。非常感谢这里的任何帮助。

我可以使用任何私有 API。

if ([notifyname isEqualToString:@"kCTSMSMessageReceivedNotification"])
{
    if ([[(NSDictionary *)userInfo allKeys]
         containsObject:@"kCTSMSMessage"]) // SMS Message
    {
        CTSMSMessage *message = (CTSMSMessage *)
        [(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];
        NSString *address = CTSMSMessageCopyAddress(NULL, message);
        NSString *text = CTSMSMessageCopyText(NULL, message);
        //NSArray *lines = [text componentsSeparatedByString:@"\n"];
        printf(" %s %s\n", [address UTF8String],[text UTF8String]);
        //printf(" %s\n", [text cString]);
        fflush(stdout);

    }
}
else if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//received SMS
{
    /*
     kCTMessageIdKey = "-2147483636″;
     kCTMessageTypeKey = 1;
     */

    NSDictionary *info = (NSDictionary *)userInfo;
    CFNumberRef msgID = (CFNumberRef)[info objectForKey:@"kCTMessageIdKey"];
    int result;
    CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type, &result); 
    /*
     Class CTMessageCenter = NSClassFromString(@"CTMessageCenter");
     id mc = [CTMessageCenter sharedMessageCenter];
     id incMsg = [mc incomingMessageWithId: result];

     int msgType = (int)[incMsg messageType];

     if (msgType == 1) //experimentally detected number
     {
     id phonenumber = [incMsg sender];

     NSString *senderNumber = (NSString *)[phonenumber canonicalFormat];
     id incMsgPart = [[incMsg items] objectAtIndex:0];
     NSData *smsData = [incMsgPart data];
     NSString *smsText = [[NSString alloc] initWithData:smsData encoding:NSUTF8StringEncoding];
     }
     */
}

谢谢纳文

4

1 回答 1

2

你的问题不够清楚。您是否希望将它们完全删除,以便它们甚至不会出现在消息应用程序(和数据库)中,或者您只是希望 SpringBoard 不通知用户传入消息?

对于第一个,您必须挂钩实际发送您在代码片段中收听的通知的过程。我很确定您将不得不修补 imagent (/System/Library/PrivateFrameworks/IMCore.framework/imagent.app/imagent)。

对于第二个,您必须在 SpringBoard 中玩耍。由于 iOS 5.0 BulletinBoard 正在处理向用户发送的通知,因此您可以在那里阻止它。(您可能想查看 SMSBBPlugin,它是一个 BulletinBoard 插件)。

或者只是启动您选择的反汇编程序,看看像 bitSMS 这样的调整是如何做到的;)

请记住,越狱调整开发有时需要大量的逆转和修补,大多数人会将他们的大部分发现留给自己。

于 2012-04-27T22:46:59.390 回答