iPhone/iPad/iPod touch的颜色检测?

72

是否有任何方法或技巧可以检测 iPhone、iPad 或 iPod touch 所安装的 iOS 是黑色还是白色?

我想在黑色或白色设备上加载相应的 UI 皮肤。


不是一个好主意。使用深色模式,用户可以选择这些东西。 - AlexH
@AlexH 在我提问的时候,我没有想到黑暗模式会在将近8年后出现。 :) - totocaster
很多事情都发生了变化。你还在继续做这个项目吗? - AlexH
6个回答

39

有一个私有 API 用于检索 DeviceColorDeviceEnclosureColor

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"]);
}

我已经在博客中提供了相关内容和一个示例应用程序:

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

警告:正如所述,这是一个私有API。在App Store构建中不要使用它。


1
不错的发现!一个小建议:你应该使用 [NSObject -respondsToSelector:]。当iOS 8发布时,你当前的逻辑可能会出现错误。 - Aaron Brager
这仍将在 iOS 8 上使用较旧的 deviceInfoForKey:。 我只需检查两个选择器,看它响应哪一个即可。 - Aaron Brager
1
@uchuugaka 我并没有隐瞒这是私有API的事实。但这是检索它的唯一方法。尽管如此,私有API仍然有一些用例 - 比如企业内部应用程序。如果你不满意,请向苹果公司投诉(你可以在http://openradar.appspot.com/15209345上提交),而不是对我的回答进行负评! - Ortwin Gentz
亚伦,你是对的。我改进了代码,使其适用于所有iOS版本。 - Ortwin Gentz
我投了反对票,因为你在建议使用私有API时没有指出使用私有API的后果。 - uchuugaka
你是个天才。你帮了我很多。 - DawnSong

20
问题的答案是没有(截至目前),而且个人认为这并不值得太多关注,因为如果最终用户使用了iPhone的外壳或者皮肤怎么办?

我建议先询问用户“嘿,你的手机颜色是什么?”然后再进行相应操作。


此外,一项研究提供了这些信息,我不确定它是否正确或是否会对您有所帮助。

序列号是关键:)

如果aabccdddeef是iPhone 4的序列号,则 ee 表示颜色,(A4 = 黑色)。我希望这里的一些人可以检查自己的信息,以查看这是否正确。


我有一部黑色的iPhone 4S和一部白色的... 它们的倒数第二和第三位数字都是“TF”...(序列号:“C39GJDTFC”和“C39GKDTF9”)。我们需要继续寻找。 - Sanjay Chaudhry
1
此外,无法通过编程方式检测序列号(至少不能使用已发布的API)。因此,序列号方法是无效的。 - Sanjay Chaudhry
感谢回复,我很感激。在“hack”中,我指的是类似于序列号检查或类似的东西。我意识到当前SDK中没有[IUDevice deviceColor]这样的东西。我正在进行自己的研究,并会及时向您报告。 - totocaster

11

仅代表个人意见 - 如果有人在寻找iPhone 5c的颜色,下面列出的颜色是从苹果官网上选出来的。

希望对每个人都有用:-)

 

iPhone 5c 颜色:

Green
R   179
G   243
B   142
HEX #B3F38E

Blue
R   123
G   195
B   252
HEX #7BC3FC

Yellow
R   255
G   243
B   141
HEX #FFF38D

Red
R   252
G   132
B   142
HEX #FF848E

White
R   239
G   239
B   239
HEX #EFEFEF

8
根据网络上散布的信息,设备的颜色编码在序列号中。iFixit博客表明倒数第三位和倒数第二位保存了这些信息:xxxxxxxxCCx 对于iPhone 4,A4表示黑色。奇怪的是,没有人知道白色iPhone 4的代码。一个论坛帖子表明它可能是DZ。每个人似乎都在重复别人的信息。
另一个网站mydigitallife.com列出了各种旧型号的颜色代码。在某些情况下,需要一起阅读三个位置才能确定颜色。根据该网站,所有 iPhone 3Gs 型号在颜色代码位置都有 3N3NP 表示“黑色16GB 3Gs”,而 3NQ 表示“白色16GB 3Gs”。原始的(2G)iPhone 也使用所有三个位置来指示大小(没有颜色选项)。
这里已经有很多问题可以帮助您获取设备的序列号。

8

为了调试目的,我编译了一个更全面的可能的deviceInfoForKey:键列表。

需要注意的有趣键(针对此问题)是DeviceRGBColor DeviceEnclosureRGBColor。它们的值似乎是以0x00rrggbb形式表示RGB值的整数。

下面是我找到的所有键作为参考:

ActiveWirelessTechnology        
AirplaneMode        
assistant        
BasebandCertId        
BasebandChipId        
BasebandPostponementStatus        
BasebandStatus        
BatteryCurrentCapacity        
BatteryIsCharging        
BluetoothAddress        
BoardId        
BootNonce        
BuildVersion        
CertificateProductionStatus        
CertificateSecurityMode        
ChipID        
CompassCalibrationDictionary        
CPUArchitecture        
DeviceClass        
DeviceColor        
DeviceEnclosureColor        
DeviceEnclosureRGBColor        
DeviceName        
DeviceRGBColor        
DeviceSupportsFaceTime        
DeviceVariant        
DeviceVariantGuess        
DiagData        
dictation        
DiskUsage        
EffectiveProductionStatus        
EffectiveProductionStatusAp        
EffectiveProductionStatusSEP        
EffectiveSecurityMode        
EffectiveSecurityModeAp        
EffectiveSecurityModeSEP        
FirmwarePreflightInfo        
FirmwareVersion        
FrontFacingCameraHFRCapability        
HardwarePlatform        
HasSEP        
HWModelStr        
Image4Supported        
InternalBuild        
InverseDeviceID        
ipad        
MixAndMatchPrevention        
MLBSerialNumber        
MobileSubscriberCountryCode        
MobileSubscriberNetworkCode        
ModelNumber        
PartitionType        
PasswordProtected        
ProductName        
ProductType        
ProductVersion        
ProximitySensorCalibrationDictionary        
RearFacingCameraHFRCapability        
RegionCode        
RegionInfo        
SDIOManufacturerTuple        
SDIOProductInfo        
SerialNumber        
SIMTrayStatus        
SoftwareBehavior        
SoftwareBundleVersion        
SupportedDeviceFamilies        
SupportedKeyboards        
telephony        
UniqueChipID        
UniqueDeviceID        
UserAssignedDeviceName        
wifi        
WifiVendor        

这些都是私有API。 - Priyal
是的,它们都是私有的。正如被接受的答案所述,“deviceInfoForKey:”是私有的。因此,所有这些键也是私有的。 - jjrscott

6

正如其他人所指出的,没有官方获取此信息的方法。苹果显然知道(在同步时查看iTunes),因此他们可以提供此信息。也许值得提出一个Radar


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接