Otros consejos

A partir de Noah Witherspoon en realizar una llamada desde mi aplicación iPhone

  

el simulador no es compatible con una gran cantidad de esquemas de URL de iOS, incluyendo aquellos para el teléfono, Maps, YouTube y aplicaciones SMS. Este es también el caso de dispositivos como el iPod touch y el iPad, que no tienen capacidades de teléfono; antes de usar cualquier esquema de URL a través de -openURL :, usted debe comprobar la compatibilidad de este régimen utilizando -canOpenURL :, que devolverá SÍ o NO dependiendo de si el dispositivo actual es compatible con el esquema de URL que está utilizando

Así [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]] consulta para averiguar si el dispositivo puede realizar llamadas.

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

Aquí es un simple fragmento de código que utilizo para comprobar el modelo de dispositivo es un teléfono y no un simulador para asegurarse de que puede realizar llamadas.

if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
    [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number]  ] ];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top