如果你調用一個.mm文件這個API,您必須聲明它喜歡的extern 「C」無效美孚(無效);據我所知,在iOS 5〜7級,你應該使用CTCallCopyAddress相反,原型爲:
extern "C" CFStringRef CTCallCopyAddress(CFAllocatorRef, CTCallRef);
注意,第二個arg是CTCallRef而非CTCall,這意味着你可以不會發送CTCall類方法(儘管其中一些方法可行)。除了連接CoreTelephony.framework,你還可以動態加載這個符號,如下圖所示:
static CFStringRef (*CTCallCopyAddress)(CFAllocatorRef, CTCallRef);
void Foo(CTCallRef call)
{
void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
CTCallCopyAddress = (CFStringRef (*)(CFAllocatorRef, CTCallRef))dlsym(libHandle, "CTCallCopyAddress");
NSString *address = (NSString *)CTCallCopyAddress(kCFAllocatorDefault, call);
NSLog(@"The caller's address is %@", address);
[address release];
dlclose(libHandle);
}
BTW,我不能讓CTCallCopyName在跳板上工作的iOS 5,還沒有計算出來或試穿其他系統呢。希望這些信息有幫助!
編輯:只需再次嘗試在iOS 5上,CTCallGetID是正確的函數來獲取調用方ID在地址簿中,其原型是ABRecordID CTCallGetID(CTCallRef)。 iOS 6和7可能是相同的。
我也有'CTCallCopyAddress'工作,但'CTCallCopyName'返回零...我在iOS8非越獄,你有沒有更好的運氣呢? – 2015-03-18 15:18:53