- extern NSString* const kCTSMSMessageReceivedNotification;
- extern NSString* const kCTSMSMessageReplaceReceivedNotification;
- extern NSString* const kCTSIMSupportSIMStatusNotInserted;
- extern NSString* const kCTSIMSupportSIMStatusReady;
- typedef struct __CTCall CTCall;
- extern NSString *CTCallCopyAddress(void*, CTCall *);
- void* CTSMSMessageSend(id server,id msg);
- typedef struct __CTSMSMessage CTSMSMessage;
- NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
- NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);
- int CTSMSMessageGetRecordIdentifier(void * msg);
- NSString * CTSIMSupportGetSIMStatus();
- NSString * CTSIMSupportCopyMobileSubscriberIdentity();
- id CTSMSMessageCreate(void* unknow/*always 0*/,NSString* number,NSString* text);
- void * CTSMSMessageCreateReply(void* unknow/*always 0*/,void * forwardTo,NSString* text);
- id CTTelephonyCenterGetDefault(void);
- void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);
- void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);
- int CTSMSMessageGetUnreadCount(void);
- static void callback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
- {
- NSString *notifyname=(NSString *)name;
- if ([notifyname isEqualToString:@"kCTCallStatusChangeNotification"])//电话
- {
- NSDictionary *info = (NSDictionary*)userInfo;
- NSString *state=[[info objectForKey:@"kCTCallStatus"] stringValue];
- if ([state isEqualToString:@"5"])//disconnect
- NSLog(@"未接:%@",state);
- }
- else if ([notifyname isEqualToString:@"kCTCallIdentificationChangeNotification"])
- {
- // CTCallCenter *center = [[CTCallCenter alloc] init];
- // center.callEventHandler = ^(CTCall *call) {
- // NSLog(@"call:%@", [call description]);
- // };
- NSDictionary *info = (NSDictionary *)userInfo;
- CTCall *call = (CTCall *)[info objectForKey:@"kCTCall"];
- NSString *caller = CTCallCopyAddress(NULL, call);
- NSLog(@"电话号码:%@",caller);
- //CTCallDisconnect(call);
- /* or one of the following functions: CTCallAnswer
- CTCallAnswerEndingActive
- CTCallAnswerEndingAllOthers
- CTCallAnswerEndingHeld
- */
- }
- else if ([notifyname isEqualToString:@"kCTRegistrationDataStatusChangedNotification"])
- {
- }
- else if ([notifyname isEqualToString:@"kCTSMSMessageReceivedNotification"])
- {//api 已过期
- 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);
- }
- }
- else if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//收到短信
- {
- /*
- 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];
- }
- */
- }
- else if ([notifyname isEqualToString:@"kCTIndicatorsSignalStrengthNotification"])//信号
- {
- /*
- kCTIndicatorsGradedSignalStrength = 2;
- kCTIndicatorsRawSignalStrength = "-101";
- kCTIndicatorsSignalStrength = 19;
- */
- }
- else if ([notifyname isEqualToString:@"kCTRegistrationStatusChangedNotification"])//网络注册状态
- {
- /*
- kCTRegistrationInHomeCountry = 1;
- kCTRegistrationStatus = kCTRegistrationStatusRegisteredHome;
- */
- }
- else if ([notifyname isEqualToString:@"kCTRegistrationDataStatusChangedNotification"])
- {
- /*
- kCTRegistrationDataActive = 1;
- kCTRegistrationDataAttached = 1;
- kCTRegistrationDataConnectionServices = (
- kCTDataConnectionServiceTypeInternet,
- kCTDataConnectionServiceTypeWirelessModemTraffic,
- kCTDataConnectionServiceTypeWirelessModemAuthentication
- );
- kCTRegistrationDataContextID = 0;
- kCTRegistrationDataIndicator = kCTRegistrationDataIndicator3G;
- kCTRegistrationDataStatus = kCTRegistrationDataStatusAttachedAndActive;
- kCTRegistrationDataStatusInternationalRoaming = 1;
- kCTRegistrationRadioAccessTechnology = kCTRegistrationRadioAccessTechnologyUTRAN;
- */
- }
- else if ([notifyname isEqualToString:@"kCTRegistrationCellChangedNotification"])
- {
- /*
- kCTRegistrationGsmCellId = 93204174;
- kCTRegistrationGsmLac = 55583;
- kCTRegistrationInHomeCountry = 1;
- kCTRegistrationRadioAccessTechnology = kCTRegistrationRadioAccessTechnologyUTRAN;
- */
- }
- else if ([notifyname isEqualToString:@"kCTIndicatorRadioTransmitNotification"])
- {
- /*
- kCTRadioTransmitDCHStatus = 1;
- */
- }
- //int unread=CTSMSMessageGetUnreadCount();
- //if (unread>0)
- //NSLog(@"未读短信:%d",unread);
- NSLog(@"名字:%@-详细:%@",notifyname,userInfo);
- }
- static void signalHandler(int sigraised)
- {
- printf("\nInterrupted.\n");
- exit(0);
- }
- <span style="font-family:Arial, Verdana, sans-serif;"><span style="white-space: normal;">
- </span></span>
执行
- 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();