web-dev-qa-db-fra.com

Comment détecter la couleur d'un iPhone 5c?

Après l'annonce de l'iPhone 5c, je suis curieux de savoir si quelqu'un connaît une API, comment obtenir une couleur d'iPhone 5c? Je suis sûr que tout le monde trouvera cela pratique de charger un jeu de couleurs correspondant à la couleur du périphérique.

Je songe à envelopper dans quelque chose comme la catégorie UIDevice, qui renverra un UIColor.

Mise à jour: @ColinE et @Ortwin Gentz ​​a indiqué la disponibilité des appels de méthode d'instance UIDevice privés.

Veuillez noter que, dans le cas de l'iPhone 5c, ce que vous cherchez réellement est deviceEnclosureColor, car deviceColor renverra toujours # 3b3b3c, car il s'agit d'une couleur de face.

signature de la méthode:

-(id)_deviceInfoForKey:(struct __CFString { }*)arg1

Catégorie UIDevice pour cela:

@interface UIDevice (deviceColour)

- (id)_deviceInfoForKey:(struct __CFString { }*)arg1;
- (NSString*)deviceColourString_UntilAppleMakesItPublic;
- (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic;


@end

@implementation UIDevice (deviceColour)

- (NSString*)deviceColourString_UntilAppleMakesItPublic
{
    return [self _deviceInfoForKey:@"DeviceColor"];
}

- (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic
{
    return [self _deviceInfoForKey:@"DeviceEnclosureColor"];
}


@end
40
ambientlight

Il existe une API privée pour récupérer les DeviceColor et DeviceEnclosureColor. Dans le cas de l'iPhone 5c, la partie intéressante est la couleur du boîtier (la couleur de l'appareil = la couleur avant est toujours # 3b3b3c).

UIDevice *device = [UIDevice currentDevice];
SEL selector = NSSelectorFromString(@"deviceInfoForKey:");
if (![device respondsToSelector:selector]) {
    selector = NSSelectorFromString(@"_deviceInfoForKey:");
}
if ([device respondsToSelector:selector]) {
    NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]);
}

J'ai blogué à ce sujet et fourni un exemple d'application:

http://www.futuretap.com/blog/device-colors/

Avertissement: comme mentionné, il s'agit d'une API privée. Ne l'utilisez pas dans les versions de l'App Store.

8
Ortwin Gentz

La couleur du périphérique (utilisé pour?) Doit être codée dans le numéro de série du périphérique. Je n'ai pas d'appareil à tester avec eux qui n'est pas encore officiellement publié, mais j'imagine que la solution ressemblera à ceci:

Le format typique du SN iPhone est le suivant: AABCCDDDEEF

AA = ID de l'usine et de la machine
B = Année de fabrication (9 correspond à 2009/2019, 0 à 2010/2020, 1 à 2011, etc.)
CC = Production Semaine (01 correspond à la semaine 1 de B, 11 à la semaine 11 de B et ainsi de suite)
DDD = Identifiant unique
EE = Couleur (A4 = noir)
F = taille (S = 16 Go, T = 32 Go)

[La source]

Il y a plus d'informations sur les techniques anciennes ici


Je voudrais cependant souligner que je suppose qu’il n’ya pas de méthode prise en charge pour obtenir le numéro de série. En supposant que vous souhaitiez uniquement connaître ces informations afin de pouvoir personnaliser votre interface utilisateur, je voudrais simplement indiquer une option utilisateur ou leur demander de sélectionner la couleur de leur périphérique au premier démarrage (ou à un autre la vie de l'utilisateur)

13
James Webster

Un certain nombre de personnes sur Twitter ont ont cité la méthode suivante :

[[UIDevice currentDevice] _deviceInfoForKey:@"DeviceColor"]

Bien que je ne l'ai pas confirmé moi-même.

3
ColinE

Cela peut vous aider ...

UIDevice *device = [UIDevice currentDevice];
    SEL selector = NSSelectorFromString([device.systemVersion hasPrefix:@"7"] ? @"_deviceInfoForKey:" : @"deviceInfoForKey:");
    if ([device respondsToSelector:selector]) {
        NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@",
              [device performSelector:selector withObject:@"DeviceColor"],
              [device performSelector:selector withObject:@"DeviceEnclosureColor"]);
    }

Ref: Détection de la couleur de l'iPhone/iPad/iPod touch?

0
Krupal Ghorpade