Como saber se o dispositivo Cocoa Touch pode fazer chamadas? [duplicado]
-
05-09-2019 - |
Pergunta
Duplicate possíveis:
iOS -? detectar se ou não telefonemas de apoio de dispositivo
Eu estou escrevendo um aplicativo para iPhone que fornece um botão para chamar um número de telefone. Eu estou usando um código como o seguinte para discar o número usando uma URL tel:
da forma habitual:
NSURL* contactTelURL = [NSURL
URLWithString:[NSString
stringWithFormat:@"tel:%@",
contactTel]];
[[UIApplication sharedApplication] openURL:contactTelURL];
Ele funciona muito bem em um iPhone real, mas eu apenas obter um alerta 'não suportado URL' no simulador. Presumivelmente, que também iria acontecer em um iPod Touch, embora eu não testei isso. Seria bom para remover o botão quando executado em um dispositivo que não vai fazer chamadas.
Existe uma maneira de detectar programaticamente se um dispositivo Cocoa Touch pode fazer chamadas telefônicas?
Solução
Você pode consultar [[UIDevice currentDevice] model]
, e verificar se ele é um iPhone.
Outras dicas
De Noah Witherspoon em Fazer uma chamada do meu aplicativo iPhone
o simulador não suporta um monte de esquemas de URL do iOS, incluindo aqueles para o telefone, Maps, Youtube, e aplicativos através de SMS. Este é também o caso de dispositivos como o iPod touch eo iPad, que não têm capacidades de telefone; antes de usar qualquer esquema de URL via -openURL :, você deve verificar se há suporte para esse sistema usando -canOpenURL :, que voltará SIM ou NÃO, dependendo se o dispositivo atual suporta o esquema de URL que você está usando
Assim [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]
consulta
para descobrir se o dispositivo pode fazer chamadas.
A partir 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
Aqui está um código simples snippet eu uso para verificar o modelo do dispositivo é um telefone e não um simulador para se certificar de que pode fazer chamadas.
if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
[[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ];
}