Comment savoir si l'appareil Cocoa Touch peut faire des appels? [dupliquer]
-
05-09-2019 - |
Question
Possible en double: iOS - détecter si support de l'appareil ou non des appels téléphoniques
J'écris une application iPhone qui offre un bouton pour appeler un numéro de téléphone. J'utilise le code comme suit pour composer le numéro à l'aide d'une URL de tel:
de la manière habituelle:
NSURL* contactTelURL = [NSURL
URLWithString:[NSString
stringWithFormat:@"tel:%@",
contactTel]];
[[UIApplication sharedApplication] openURL:contactTelURL];
Il fonctionne très bien sur un vrai iPhone, mais je reçois juste une alerte « URL non prise en charge » dans le simulateur. On peut supposer que ce serait aussi se produire sur un iPod Touch, bien que je ne l'ai pas testé cela. Il serait bon de supprimer le bouton lors de l'exécution sur un périphérique qui ne fera pas appel.
Y at-il un moyen de détecter si un dispositif programatically Cocoa Touch peut faire des appels téléphoniques?
La solution
Vous pouvez interroger [[UIDevice currentDevice] model]
et vérifier si elle est un iPhone.
Autres conseils
De Noah Witherspoon appeler depuis mon application iPhone
le simulateur ne supporte pas beaucoup des schémas d'URL iOS, y compris ceux pour le téléphone, cartes, Youtube, et des applications SMS. Ceci est également le cas pour les appareils comme le toucher et l'iPad iPod, qui n'ont pas les capacités de téléphone; avant d'utiliser un système d'URL via -openURL :, vous devriez vérifier pour le soutien à ce régime en utilisant -canOpenURL :, qui retournera OUI ou NON selon que le dispositif actuel prend en charge le système d'URL que vous utilisez
requête [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]
pour savoir si l'appareil peut effectuer des appels.
De 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
Voici un extrait de code simple, je l'utilise pour vérifier le modèle de l'appareil est un téléphone et non un simulateur pour vous assurer qu'il peut faire des appels.
if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
[[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ];
}