Как узнать, может ли устройство Cocoa Touch совершать звонки? [дубликат]
Я пишу приложение для iPhone, которое предоставляет кнопку для вызова телефонного номера. Я использую код, подобный следующему, чтобы набрать номер, используя URLВозможный дубликат:
iOS-определение того, поддерживает ли устройство телефонные звонки?
tel:
обычным способом:
NSURL* contactTelURL = [NSURL
URLWithString:[NSString
stringWithFormat:@"tel:%@",
contactTel]];
[[UIApplication sharedApplication] openURL:contactTelURL];
Он отлично работает на реальном iPhone, но я просто получаю предупреждение "неподдерживаемый URL" в симуляторе. Предположительно, это также произойдет на iPod Touch, хотя я еще не тестировал тот. Было бы неплохо удалить кнопку при запуске на устройстве, которое не будет совершать звонки.
Есть ли способ программно определить, может ли устройство Cocoa Touch совершать телефонные звонки?4 ответа:
От Ноа Уизерспуна в сделать звонок из приложения для iPhone
Симулятор не поддерживает многие схемы URL iOS, в том числе для телефонов, карт, Youtube и SMS-приложений. Это также относится к устройствам, таким как iPod touch и iPad, которые не имеют возможностей телефона; перед использованием любой схемы URL через-openURL:, вы должны проверить поддержку этой схемы с помощью -canOpenURL:, который вернет да или нет в зависимости от того, является ли текущее устройство поддерживает схему URL, которую вы используете
Итак, запрос
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]
чтобы узнать, может ли устройство совершать звонки.
Из iphonedevelopment.blogspot.com
#import <sys/utsname.h> enum { MODEL_IPHONE_SIMULATOR, MODEL_IPOD_TOUCH, MODEL_IPHONE, MODEL_IPHONE_3G }; @interface DeviceDetection : NSObject + (uint) detectDevice; + (NSString *) returnDeviceName:(BOOL)ignoreSimulator; @end @implementation DeviceDetection + (uint) detectDevice { NSString *model= [[UIDevice currentDevice] model]; // Some iPod Touch return "iPod Touch", others just "iPod" NSString *iPodTouch = @"iPod Touch"; NSString *iPodTouchLowerCase = @"iPod touch"; NSString *iPodTouchShort = @"iPod"; NSString *iPhoneSimulator = @"iPhone Simulator"; uint detected; if ([model compare:iPhoneSimulator] == NSOrderedSame) { // iPhone simulator detected = MODEL_IPHONE_SIMULATOR; } else if ([model compare:iPodTouch] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else if ([model compare:iPodTouchShort] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else { // Could be an iPhone V1 or iPhone 3G (model should be "iPhone") struct utsname u; // u.machine could be "i386" for the simulator, "iPod1,1" on iPod Touch, "iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G uname(&u); if (!strcmp(u.machine, "iPhone1,1")) { detected = MODEL_IPHONE; } else { detected = MODEL_IPHONE_3G; } } return detected; } + (NSString *) returnDeviceName:(BOOL)ignoreSimulator { NSString *returnValue = @"Unknown"; switch ([DeviceDetection detectDevice]) { case MODEL_IPHONE_SIMULATOR: if (ignoreSimulator) { returnValue = @"iPhone 3G"; } else { returnValue = @"iPhone Simulator"; } break; case MODEL_IPOD_TOUCH: returnValue = @"iPod Touch"; break; case MODEL_IPHONE: returnValue = @"iPhone"; break; case MODEL_IPHONE_3G: returnValue = @"iPhone 3G"; break; default: break; } return returnValue; } @end
Вот простой фрагмент кода, который я использую, чтобы проверить модель устройства-это телефон, а не симулятор, чтобы убедиться, что он может совершать звонки.
if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound && [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ]; }