Wie kann man sagen, wenn Cocoa Touch-Gerät telefonieren kann? [Duplikat]
-
05-09-2019 - |
Frage
Mögliche Duplizieren:
iOS - Erkennen, ob oder nicht Geräteunterstützung Anrufe
Ich schreibe eine iPhone-Anwendung, die eine Schaltfläche stellt eine Telefonnummer anzurufen. Ich verwende Code wie folgt aus der Nummer mit einer tel:
URL in der üblichen Weise zu wählen:
NSURL* contactTelURL = [NSURL
URLWithString:[NSString
stringWithFormat:@"tel:%@",
contactTel]];
[[UIApplication sharedApplication] openURL:contactTelURL];
Es funktioniert gut auf einem echten iPhone, aber ich bekomme nur eine ‚Nicht unterstützte URL‘ Alarm im Simulator. Vermutlich geschieht das würde auch auf einem iPod Touch, obwohl ich nicht getestet haben. Es wäre schön, den Knopf zu entfernen, wenn auf einem Gerät ausgeführt wird, die keine Anrufe tätigen wird.
Gibt es eine Möglichkeit programmatisch zu erkennen, ob ein Cocoa Touch-Gerät telefonieren kann?
Lösung
Sie könnten abfragen [[UIDevice currentDevice] model]
, und überprüfen, ob es sich um ein iPhone ist.
Andere Tipps
Von Noah Witherspoon unter einen Anruf von meiner iPhone-Anwendung Stellen
Der Simulator unterstützt viele iOS-URL-Schema, einschließlich diejenigen, für das Telefon, Maps, YouTube und SMS-Anwendungen nicht. Dies ist auch der Fall für Geräte wie den iPod touch und das iPad, die keine Telefonfunktionen haben; jedes URL-Schemas über -openURL vor der Verwendung :, sollten Sie -canOpenURL für die Unterstützung prüfen für dieses Schema verwenden :, die JA zurückkehren oder NO je nachdem, ob das aktuelle Gerät des URL-Schema unterstützt Sie mit
So Abfrage [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]
wenn das Gerät, um herauszufinden, Anrufe tätigen.
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
Hier ist ein einfacher Codeausschnitt Ich verwende das Gerätemodell zu überprüfen, ein Telefon und keinen Simulator sicherstellen, dass es Anrufe tätigen kann.
if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
[[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ];
}