原文地址:http://blog.csdn.net/laigb/article/details/6617264
首先添加coreTelephony.framework
- #import <UIKit/UIKit.h>
- #include <notify.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- typedef struct __CTSMSMessage CTSMSMessage;
- NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
- NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);
- id CTTelephonyCenterGetDefault(void);
- void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);
- void dolog(id formatstring,...)
- {
- va_list arglist;
- if (formatstring)
- {
- va_start(arglist, formatstring);
- id outstring = [[NSString alloc] initWithFormat:formatstring arguments:arglist];
- printf("%s\n", [outstring UTF8String]);
- va_end(arglist);
- }
- }
- static void callback(CFNotificationCenterRef center,
- void *observer, CFStringRef name,
- const void *object, CFDictionaryRef userInfo)
- {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- // printf("NOTIFICATION: %s\n", [name UTF8String]);
- if (!userInfo) return;
- NSDictionary *info = (NSDictionary*)userInfo;
- int dcount = CFDictionaryGetCount(userInfo);
- id keys = [(NSDictionary*)userInfo allKeys];
- int i;
- for (i = 0; i < dcount; i++)
- {
- id key = [keys objectAtIndex:i];
- dolog(@" %@: %@", key, [info objectForKey:key]);
- }
- 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 %d\n", [address cString], [lines count]);
- printf(" %s\n", [text cString]);
- fflush(stdout);
- }
- [pool release];
- return ;
- }
- static void signalHandler(int sigraised)
- {
- printf("\nInterrupted.\n");
- exit(0);
- }
- int main(int argc, char **argv)
- {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- // Initialize listener by adding CT Center observer implicit
- id ct = CTTelephonyCenterGetDefault();
- CTTelephonyCenterAddObserver( ct, NULL, callback,NULL,NULL,
- CFNotificationSuspensionBehaviorHold);
- // Handle Interrupts
- sig_t oldHandler = signal(SIGINT, signalHandler);
- if (oldHandler == SIG_ERR)
- {
- printf("Could not establish new signal handler");
- exit(1);
- }
- // Run loop lets me catch notifications
- printf("Starting run loop and watching for notification.\n");
- CFRunLoopRun();
- // Shouldn't ever get here. Bzzzt
- printf("Unexpectedly back from CFRunLoopRun()!\n");
- [pool release];
- }