电话事件整理

来源:互联网 发布:大学数学网络教学平台 编辑:程序博客网 时间:2024/05/09 23:14
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();
原创粉丝点击