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