2011-06-15 5 views
1

J'essaie d'obtenir le numéro de l'appelant (pour les appareils jailbreakés) avec ce code: extern CFTypeRef CTCallCopyName (void *, CTCall * call);iOS Caller ID Récupérer

NSLog (@ "% @", CTCallCopyName (NULL, appel (CTCall *)));

je reçois l'erreur: "CTCallCopyName (void *, CTCall *)", référencé à partir de: ld: symbole (s) non trouvé pour l'architecture ARMv6

Je base de téléphonie lié à mon projet. Peut-être que mon prototype est faux ... je ne sais pas. Des idées? Xcode 3, 4 sdk

Répondre

0

Si vous appelez cette API dans un fichier .mm, vous devez déclarer comme extern "C" void foo (void); Pour autant que je sache, sur iOS 5 ~ 7, vous devez utiliser CTCallCopyAddress à la place, le prototype est:

extern "C" CFStringRef CTCallCopyAddress(CFAllocatorRef, CTCallRef); 

Notez que le deuxième arg est un CTCallRef plutôt que d'un CTCall, ce qui signifie que vous pouvez ne pas envoyer les méthodes de classe CTCall (bien que certains d'entre eux fonctionnent). En plus de relier CoreTelephony.framework, vous pouvez également charger dynamiquement ce symbole, comme indiqué ci-dessous:

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, je ne peux pas CTCallCopyName à travailler dans SpringBoard sur iOS 5, ne sont pas tout compris ou essayé d'autres systèmes encore. Espérons que cette information aide!

EDIT: Essayez-le de nouveau sur iOS 5, CTCallGetID est la bonne fonction pour obtenir l'ID de l'appelant dans le carnet d'adresses, dont le prototype est ABRecordID CTCallGetID (CTCallRef). iOS 6 et 7 sont peut-être les mêmes.

+0

J'ai aussi 'CTCallCopyAddress' pour fonctionner mais' CTCallCopyName' renvoie zéro ... Je suis sur iOS8 non jailbreaké, as-tu eu plus de chance avec ça? –