Estoy desarrollando una aplicación que se conecta a otro iphone usando bonjour. Una de sus características es que cuando me conecto al otro dispositivo, verificará automáticamente si tengo el número de teléfono de otras personas. Entonces mi problema es ¿cómo reviso mi libreta de direcciones por el número de teléfono proporcionado por el otro dispositivo?¿Cómo buscar en la libreta de direcciones de iphone un número de teléfono específico?
10
A
Respuesta
18
He aquí un ejemplo extraído de uno de mis libros de direcciones métodos. No estaba buscando por número de teléfono, pero esto le da una idea de cómo avanzar con lo que necesita:
- (void) scanAddressBookSample
{
NSUInteger i;
NSUInteger k;
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *people = (NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
if (people==nil)
{
NSLog(@"NO ADDRESS BOOK ENTRIES TO SCAN");
CFRelease(addressBook);
return;
}
for (i=0; i<[people count]; i++)
{
ABRecordRef person = (ABRecordRef)[people objectAtIndex:i];
//
// Phone Numbers
//
ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFIndex phoneNumberCount = ABMultiValueGetCount(phoneNumbers);
for (k=0; k<phoneNumberCount; k++)
{
CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex(phoneNumbers, k);
CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex(phoneNumbers, k);
CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel(phoneNumberLabel); // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"
// Find the ones you want here
//
NSLog(@"-----PHONE ENTRY -> %@ : %@", phoneNumberLocalizedLabel, phoneNumberValue);
CFRelease(phoneNumberLocalizedLabel);
CFRelease(phoneNumberLabel);
CFRelease(phoneNumberValue);
}
}
[people release];
CFRelease(addressBook);
}
-1
Usar esto. este es mi código
NSLog(@"=====Make People Array with Numbers. Start.");
peopleWithNumber = [[NSMutableDictionary alloc] init];
for (int i=0; i < [people count]; i++) {
NSInteger phoneCount = [self phoneCountAtIndex:i];
if (phoneCount != 0) {
NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];
for (int j=0 ; j < phoneCount ; j++) {
[phoneNumbers addObject:[self phoneNumberAtIndex:i phoneIndex:j]];
}
[peopleWithNumber addEntriesFromDictionary:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithArray:phoneNumbers], [self fullNameAtIndex:i], nil]];
}
}
NSLog(@"=====Make People Array with Numbers. End.\n");
método de búsqueda. Sería más rápido que usar el arreglo
"NSArray * people = (NSArray *) ABAddressBookCopyArrayOfAllPeople (addressBook);"
- (NSArray *)searchNamesByNumber:(NSString *)number {
NSString *predicateString = [NSString stringWithFormat:@"%@[SELF] contains '%@'",@"%@",number];
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:predicateString,peopleWithNumber,number];
NSArray *names = [[peopleWithNumber allKeys] filteredArrayUsingPredicate:searchPredicate];
return names;
}
5
-(void)createQuickAccessContacts{
NSMutableDictionary contactDictionary= [[NSMutableDictionary alloc]init];
CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex n = ABAddressBookGetPersonCount(addressBook);
NSDate *date=[NSDate date];
for(int i = 0 ; i < n ; i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(all, i);
ABMultiValueRef phones = (ABMultiValueRef)ABRecordCopyValue(ref, kABPersonPhoneProperty);
for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
{
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
NSString *phoneNumber = (__bridge NSString *)phoneNumberRef;
[contactDictionary setObject:(__bridge id)(ref) forKey:phoneNumber];
}
}
NSLog(@" Time taken %f for %i contacts",[[NSDate date] timeIntervalSinceDate:date],[contactDictionary count]);
}
Esta toma como 0,5 segundos para la memoria de 2.5 mil contactos para llenar entonces se puede encontrar el contacto utilizando el número
ABRecordRef ref= [contactDictionary objectForKey:@"89xxxxxxx"];
su súper rápida toma como 0.000x segundos
Cuestiones relacionadas
- 1. Obtener la etiqueta de número de teléfono iPhone de la Libreta de direcciones
- 2. ¿Cuáles son las etiquetas que rodean la etiqueta de número de teléfono predeterminado de la libreta de direcciones de iPhone?
- 3. Adición número de teléfono y correo electrónico a la libreta de direcciones da accidente en iPhoneApp
- 4. iPhone: la libreta de direcciones se borra a veces
- 5. cómo importar la lista de contactos de la libreta de direcciones de iphone a mi aplicación?
- 6. Buscar contacto por número de teléfono
- 7. Buscar contactos favoritos de la API de la libreta de direcciones de iOS
- 8. ¿Cómo puedo acceder a la libreta de direcciones de iPhone en una aplicación web?
- 9. Contactos de la libreta de direcciones en Core Data
- 10. ¿Alguien sabe de un contenedor para el marco de la libreta de direcciones para iphone?
- 11. Obtener la imagen de una persona de la libreta de direcciones de iPhone
- 12. Obtener fotos de la libreta de direcciones en la aplicación iphone
- 13. Obtener contactos de la libreta de direcciones de iPhone en una aplicación web móvil?
- 14. Libreta de direcciones del iPhone: Orígenes y cuentas de la lista
- 15. Importación de datos de la libreta de direcciones en el simulador de iPhone
- 16. IPhone simple número de teléfono de validación
- 17. iPhone ABPeoplePickerNavigationController - Cómo seleccionar dos entradas individuales de dos propiedades multivalo diferentes de una persona de la libreta de direcciones
- 18. Cómo analizar y mostrar hipervínculos (número de teléfono/direcciones de correo electrónico, etc.) en UILabel?
- 19. ¿Obtener grupo de contactos de la libreta de direcciones?
- 20. cómo obtener contactos usando API de la libreta de direcciones en la programación ios?
- 21. ¿Cómo obtener los correos electrónicos de contactos de la libreta de direcciones de un iPhone como NSStrings?
- 22. Agregue un contacto al dispositivo móvil Libreta de direcciones de una página web HTML
- 23. Diseño de la base de datos de la libreta de direcciones: desnormalizar?
- 24. iOS 6 ¿La libreta de direcciones no funciona?
- 25. Marque un número usando Phonegap en el teléfono IPhone
- 26. Usando Cocoa Touch Tutorial: Extraer los valores de la dirección de la libreta de direcciones en iPhone OS
- 27. ¿Cómo buscar el nombre de un contacto desde su número de teléfono en Android?
- 28. Ordenar NSArray de NSStrings como libreta de direcciones de iPhone especie
- 29. ¿Busca una dirección de correo electrónico de "trabajo" para una persona en la libreta de direcciones de iPhone?
- 30. Cómo seleccionar varias entradas en la libreta de direcciones utilizando ABPeoplePickerNavigationController
AlBeebe, Unfortunetly se tarda mucho mucho mucho más tiempo en un dispositivo (iPhone 4, 4.2). Tomé 15 segundos para una libreta de direcciones de 3000) – Rabih
iphone 3GS ios4.2.2 => toma más de 40 segundos para 2000 contactos. No es bueno. – ChangUZ
Muchas gracias, gran trabajo – wod