Come dire se il dispositivo Cocoa Touch è possibile effettuare chiamate? [duplicare]
-
05-09-2019 - |
Domanda
Eventuali duplicati:
- Rilevamento o meno telefonate di supporto dispositivo
Sto scrivendo un'applicazione per iPhone che fornisce un pulsante per chiamare un numero di telefono. Sto utilizzando il codice simile al seguente per comporre il numero utilizzando un URL tel:
nel solito modo:
NSURL* contactTelURL = [NSURL
URLWithString:[NSString
stringWithFormat:@"tel:%@",
contactTel]];
[[UIApplication sharedApplication] openURL:contactTelURL];
Funziona bene su un vero e proprio iPhone, ma ho appena ottenere alert un 'non supportato URL' nel simulatore. Presumibilmente che sarebbe anche accadere su un iPod Touch, anche se non ho ancora testato questo. Sarebbe bello per rimuovere il pulsante quando in esecuzione su un dispositivo che non farà le chiamate.
C'è un modo per rilevare se un dispositivo programatically Cocoa Touch può effettuare chiamate?
Soluzione
Si potrebbe interrogare [[UIDevice currentDevice] model]
, e verificare se si tratta di un iPhone.
Altri suggerimenti
Da Noè Witherspoon a effettuare una chiamata dalla mia applicazione iPhone
il simulatore non supporta un sacco di schemi URL di iOS, compresi quelli per il telefono, Maps, YouTube, e le applicazioni SMS. Questo è anche il caso di dispositivi come l'iPod touch e l'iPad, che non hanno le capacità di telefonia; prima di utilizzare qualsiasi schema URL tramite -openURL :, si dovrebbe verificare per il supporto per tale regime usando -canOpenURL :, che restituirà SI o NO a seconda che il dispositivo corrente supporta lo schema URL che si sta utilizzando
Quindi interrogazione [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]
per scoprire se il dispositivo è in grado di effettuare chiamate.
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
Ecco un semplice frammento di codice che uso per verificare il modello di dispositivo è un telefono e non un simulatore per assicurarsi che sia possibile effettuare chiamate.
if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
[[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ];
}