jeudi 16 février 2012

Détection périphérique

Update: L'auteur du code de détection de périphérique a été identifié! Max Horv'ath tombé moi une note me faisant savoir que ce joli petit peu de code a été écrit par lui. Il a une grande blog qui couvre souvent l'iPhone SDK du matériel aussi.
Quelqu'un m'a demandé sur Twitter pour savoir comment détecter ce périphérique le code a été exécuté. Depuis un arbre est tombé dans ma cour l'autre jour, à droite sur les lignes téléphoniques et de prendre mon service Internet dans le processus, je travaillais sur un iPhone, et en essayant de répondre à une question rapidement.

En bref, j'ai donné une mauvaise réponse. Mes excuses à tous ceux qui comptaient sur elle.

Voici un code, écrit par Max Horv'ath, Qui détecte le modèle de l'appareil correctement.

#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



Aucun commentaire: