`
473687880
  • 浏览: 482444 次
文章分类
社区版块
存档分类
最新评论

IOS私有API的了解

 
阅读更多

IOS的API分为四种:

PublishedAPI(公开的API)(或者Documented API

还有两类:私有APIPrivateAPI和未公开APIUnPublished API(或者UndocumentedAPI)

私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API

按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。

私有API会面临审核通不过然后不能上线,但是也有使用私有API通过审核的比如谷歌的“GoogleVoice”,所以具体审核的详情不得而知。

<wbr></wbr>

示例一:

使用私有API——CoreTelephony获取本机号码

步骤如下:
1)导入CoreTelephony这个private framework
2)在xxx.m中加入红字部分:

#import "xxx.h"

extern NSString*CTSettingCopyMyPhoneNumb<wbr>er();<br></wbr>

@implementation
+(NSString *)myNumber{
return CTSettingCopyMyPhoneNumb<wbr>er();<br> }</wbr>

@end

3)在其它地方调用NSLog(@"myNumber=%@",[xxxmyNumber]);即是本机号码

另外机子的唯一标识码等一些信息可以用[UIDevice currentDevice]的uniqueIdentifier,name等属性来获取

<wbr></wbr>

其他资料:

callblocking on iPhone4

//using private API
//CoreTelephony framework is needed

extern NSString* const kCTSMSMessageReceivedNot<wbr>ification;<br> extern NSString* constkCTSMSMessageReplaceRece<wbr>ivedNotification;<br> extern NSString* const kCTSIMSupportSIMStatusNo<wbr>tInserted;<br> extern NSString* const kCTSIMSupportSIMStatusRe<wbr>ady;</wbr></wbr></wbr></wbr>

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 CTSMSMessageGetRecordIde<wbr>ntifier(void * msg);<br> NSString * CTSIMSupportGetSIMStatus<wbr>();<br> NSString * CTSIMSupportCopyMobileSu<wbr>bscriberIdentity();</wbr></wbr></wbr>

id CTSMSMessageCreate(void* unknow,NSString* number,NSString*text);
void * CTSMSMessageCreateReply(void* unknow,void *forwardTo,NSString* text);

id CTTelephonyCenterGetDefa<wbr>ult(void);<br> voidCTTelephonyCenterAddObse<wbr>rver(id,id,CFNotificationCallback,NSString*,void*,int);<br> void CTTelephonyCenterRemoveO<wbr>bserver(id,id,NSString*,void*);<br> int CTSMSMessageGetUnreadCou<wbr>nt(void);</wbr></wbr></wbr></wbr>

static void callback(CFNotificationCenterRef center, void*observer, CFStringRef name, const void *object, CFDictionaryRefuserInfo)
{
NSString *notifyname=(NSString *)name;
if ([notifynameisEqualToString:@"kCTCallStatusChangeNotif<wbr>ication"])//phonecall<br> {<br> NSDictionary *info = (NSDictionary*)userInfo;</wbr>

NSString *state=[[info objectForKey:@"kCTCallStatus"]stringValue];
if ([state isEqualToString:@"5"])//disconnect
NSLog(@”unanswered:%@”,state);

}
else if ([notifynameisEqualToString:@"kCTCallIdentificationCha<wbr>ngeNotification"])<br> {<br> // CTCallCenter *center = [[CTCallCenter alloc] init];<br> // center.callEventHandler = ^(CTCall *call) {<br> // NSLog(@”call:%@”, [call description]);<br> // };</wbr>

NSDictionary *info = (NSDictionary *)userInfo;
CTCall *call = (CTCall *)[info objectForKey:@"kCTCall"];
NSString *caller = CTCallCopyAddress(NULL, call);
NSLog(@”电话号码:%@”,caller);
//CTCallDisconnect(call);

}
else if ([notifynameisEqualToString:@"kCTRegistrationDataStatu<wbr>sChangedNotification"])<br> {</wbr>

}
else if ([notifynameisEqualToString:@"kCTSMSMessageReceivedNot<wbr>ification"])<br> {//api expired<br> if ([[(NSDictionary *)userInfo allKeys]<br> containsObject:@”kCTSMSMessage”]) // SMS Message<br> {<br> CTSMSMessage *message = (CTSMSMessage *)<br> [(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];<br> NSString *address = CTSMSMessageCopyAddress(NULL, message);<br> NSString *text = CTSMSMessageCopyText(NULL, message);<br> //NSArray *lines = [text componentsSeparatedByStr<wbr>ing:@"\n"];</wbr></wbr>

//printf(” %s %d\n”, [address cString], [lines count]);
//printf(” %s\n”, [text cString]);
fflush(stdout);

}
}
else if ([notifynameisEqualToString:@"kCTMessageReceivedNotifi<wbr>cation"])//receivedSMS<br> {<br></wbr>

NSDictionary *info = (NSDictionary *)userInfo;
CFNumberRef msgID = (CFNumberRef)[infoobjectForKey:@"kCTMessageIdKey"];
int result;
CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type,&result);


}
else if ([notifynameisEqualToString:@"kCTIndicatorsSignalStren<wbr>gthNotification"])//signal<br> {<br></wbr>

}
else if ([notifynameisEqualToString:@"kCTRegistrationStatusCha<wbr>ngedNotification"])//networkregistration status<br> {<br></wbr>

}
else if ([notifynameisEqualToString:@"kCTRegistrationDataStatu<wbr>sChangedNotification"])<br> {<br><br> }<br> else if ([notifynameisEqualToString:@"kCTRegistrationCellChang<wbr>edNotification"])<br> {<br><br> }<br> else if ([notifynameisEqualToString:@"kCTIndicatorRadioTransmi<wbr>tNotification"])<br> {<br><br> }<br> //int unread=CTSMSMessageGetUnreadCou<wbr>nt();<br> //if (unread&gt;0)<br> //NSLog(@”unread SMS:%d”,unread);</wbr></wbr></wbr></wbr>

NSLog(@”name:%@-detail:%@”,notifyname,userInfo);

}

static void signalHandler(int sigraised)
{
printf(“\nInterrupted.\n”);
exit(0);
}

//—————–

id ct = CTTelephonyCenterGetDefa<wbr>ult();<br> CTTelephonyCenterAddObse<wbr>rver(ct, NULL, callback, NULL, NULL,CFNotificationSuspension<wbr>BehaviorHold);<br> // Handle Interrupts<br> sig_t oldHandler = signal(SIGINT, signalHandler);<br> if (oldHandler == SIG_ERR)<br> {<br> printf(“Could not establish new signal handler”);<br> exit(1);<br> }<br> // Run loop lets me catch notifications<br> printf(“Starting run loop and watching for notification.\n”);<br> //CFRunLoopRun();</wbr></wbr></wbr>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics