在问这个问题之前我搜索过,没有满足我需要的答案。
所以这是我的要求,
我有这段代码用于检测传入的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];
}
*/
}
由于 纳温
答案 0 :(得分:2)
你的问题不够明确。您是否希望将它们完全删除,以便它们甚至不在Message App(和数据库)中,或者您只是希望SpringBoard不通知用户传入的消息?
对于第一个,您将必须挂钩实际发送您正在您的代码片段中收听的通知的进程。我很确定你不得不修补imagent(/System/Library/PrivateFrameworks/IMCore.framework/imagent.app/imagent)。
对于第二个,你必须在SpringBoard中玩游戏。由于iOS 5.0 BulletinBoard正在处理对用户的通知,因此您可以在那里阻止它。 (你可能想看一下这是一个BulletinBoard插件的SMSBBPlugin)。
或者只是启动你选择的反汇编程序,看看像biteSMS这样的调整是如何做的;)
请记住,越狱调整开发有时需要进行大量的逆转和修补,大多数人都会将自己的研究成果留给自己。