【问题标题】:Detecting Color of iPhone/iPad/iPod touch?检测 iPhone/iPad/iPod touch 的颜色?
【发布时间】:2011-12-11 10:08:53
【问题描述】:

是否有任何方法或破解方法可以检测 iOS 安装在什么颜色(黑色/白色)的 iPhone、iPad 或 iPod touch 上?

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

【问题讨论】:

  • 不是一个好主意。使用深色模式,用户可以选择这些东西
  • @AlexH 在询问的时候,我没有看到将近 8 年后出现的黑暗模式。 :)
  • 发生了很多变化。你还在从事这个项目吗?

标签: ios iphone objective-c uidevice


【解决方案1】:

有一个私有 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 构建中使用它。

【讨论】:

  • 不错的发现!一个小建议:你应该使用[NSObject -respondsToSelector:]。当 iOS 8 发布时,您当前的逻辑可能无法正常运行。
  • 这仍然会在 iOS 8 上使用旧的deviceInfoForKey:。我会检查两个选择器,看看它响应哪个。
  • @uchuugaka 我没有隐瞒它是私人的事实。但这是找回它的唯一方法。尽管如此,私有 API 还是有一些用例——例如内部企业应用程序。向 Apple 投诉(你可以欺骗 openradar.appspot.com/15209345),而不是拒绝我的回答!
  • 亚伦,你是对的。我将代码改进为与 iOS 版本无关。
  • 我投了反对票,因为您在建议使用私有 API 时没有指出使用私有 API 的后果。
【解决方案2】:

这个问题的答案是(截至目前)并且个人而言我认为这不值得,因为如果最终用户使用皮肤会怎样还是他的 iPhone 的额外外壳?

我建议首先问用户“嘿,你的手机是什么颜色的?”然后做相应的事情。


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

序列号是关键:)

如果aabccdddeef是iPhone 4的序列号,ee代表颜色,(A4=黑色)。我希望你们中的一些人与你们一起检查这些信息,看看这是否属实。

【讨论】:

  • 我有一个黑色的 iPhone 4S 和一个白色的...它们的倒数第二和第三个数字都是“TF”...(序列号:“C39GJ DTFC”和“C39GKDTF9”)。我们需要继续寻找。
  • 此外,无法以编程方式检测序列号(至少通过使用已发布的 API)。所以序列号的方式是DoA。
  • 感谢回复,非常感谢。在“hack”中,我的意思是序列号检查或类似的东西。我确实意识到当前 SDK 中没有 [IUDevice deviceColor] 东西。我正在做自己的研究并随时通知您。
【解决方案3】:

值我的 2 美分 - 如果有人在寻找 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

【讨论】:

    【解决方案4】:

    根据网络上散布的信息,设备的颜色编码在序列号中。 iFixit's blog 表示倒数第三和倒数第二个位置保存信息:xxxxxxxxCCx 对于 iPhone 4,A4 表示黑色。似乎没有人有白色 iPhone 4 的代码,这很奇怪。一个forum posting 表示它可能DZ。每个人似乎都只是在这里鹦鹉学舌地复制其他人的信息。

    另一个网站mydigitallife.com 有一篇文章列出了各种旧型号的颜色代码。在某些情况下,必须一起读取三个位置以确定颜色。根据这个网站,所有 iPhone 3Gs 型号在颜色代码位置都有3N3NP 表示“黑色 16GB 3Gs”,3NQ 表示“白色 16GB 3Gs”。最初的 (2G) iPhone 也使用所有三个位置来指示尺寸(没有颜色选项)。

    这里已经有一些关于 SO 的问题可以帮助您获取设备的序列号。

    【讨论】:

      【解决方案5】:

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

      要注意的有趣键(对于这个问题)是DeviceRGBColorDeviceEnclosureRGBColor。这些值似乎是一个整数,以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
      • 是的,它们都是私有的。如已接受的答案中所述,deviceInfoForKey: 是私有的。因此,所有这些键也是。
      【解决方案6】:

      正如其他人所指出的,不,没有获取此信息的官方方式。 Apple 清楚地知道(同步时查看 iTunes),因此他们可以提供它。可能值得提出Radar

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 2010-10-14
        • 2011-02-02
        • 2011-08-22
        • 2011-11-09
        • 2014-12-12
        • 1970-01-01
        相关资源
        最近更新 更多