Есть ли способ узнать цвет (белый, черный, розовое золото и т. Д.) Устройства iOS в Свифт? [Дубликат]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

69
задан Ortwin Gentz 21 February 2014 в 11:03
поделиться

7 ответов

Есть частный API для извлечения как DeviceColor, так и DeviceEnclosureColor.

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.

36
ответ дан Ortwin Gentz 17 August 2018 в 13:50
поделиться
  • 1
    Хорошая находка! Небольшое предложение: вы должны использовать [NSObject -respondsToSelector:]. Ваша текущая логика может работать некорректно при освобождении iOS 8. – Aaron Brager 11 October 2013 в 20:38
  • 2
    Это все равно будет использовать старший deviceInfoForKey: на iOS 8. Я бы просто проверил оба селектора и посмотрел, на какой из них он отвечает. – Aaron Brager 11 October 2013 в 21:01
  • 3
    @uchuugaka Я не скрывал, что это личное. Но это единственный способ получить его. Однако для частных API есть некоторые варианты использования - например, корпоративные приложения. Жалуйтесь на Apple (вы можете обмануть openradar.appspot.com/15209345 ) вместо того, чтобы опробовать мой ответ! – Ortwin Gentz 14 October 2013 в 09:12
  • 4
    Аарон, ты прав. Я улучшил код, чтобы быть независимым от iOS. – Ortwin Gentz 14 October 2013 в 09:24
  • 5
    Я проголосовал за то, что вы не вызывали разницы в использовании частного API, предлагая использовать частный API. – uchuugaka 14 October 2013 в 11:58

Ответ на вопрос НЕТ (на данный момент) и лично Я не думаю, что это стоит того, потому что, если конечный пользователь использует скин или дополнительный корпус для своего iPhone ?

Я бы предложил сначала спросить пользователя: «Эй, какой цвет вашего телефона?» и затем сделайте соответственно.


Кроме того, исследование предоставило мне эту информацию, я не уверен, является ли оно ИСТИННЫМ или если оно поможет вам.

< blockquote>

Серийный номер - это ключ:)

Если aabccdddeef является серийным номером iPhone 4, ee представляет цвет, (A4 = черный). Я надеюсь, что некоторые из вас здесь проверит эту информацию, чтобы узнать, правда ли это.

20
ответ дан COD3BOY 17 August 2018 в 13:50
поделиться
  • 1
    У меня есть черный iPhone 4S & amp; белый ... Вторая и третья последние цифры обоих из них являются «TF» ... (Серийные номера: «C39GJ DTFC» и «C39GK DTF9»). Нам нужно продолжать искать. – Sanjay Chaudhry 12 December 2011 в 18:58
  • 2
    Кроме того, невозможно определить серийный номер программно (по крайней мере, используя опубликованные API). Таким образом, подход с серийным номером - это DoA. – Sanjay Chaudhry 12 December 2011 в 19:03
  • 3
    Спасибо за ответы, я ценю это. В "взломе" Я имел в виду нечто вроде проверки серийного номера или подобного. Я действительно понимаю, что в текущем SDK нет [IUDevice deviceColor]. Я занимаюсь своими исследованиями и держу вас в курсе. – totocaster 16 December 2011 в 14:02

Просто мои 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
10
ответ дан Jeff Kranenburg 17 August 2018 в 13:50
поделиться

В целях отладки я собрал более полный список возможных клавиш deviceInfoForKey:.

Интересными клавишами для записи (для этого вопроса) являются DeviceRGBColor DeviceEnclosureRGBColor. Значения представляют собой целое число, которое представляет значение RGB в форме 0x00rrggbb.

Здесь, для справки, все ключи, которые я нашел:

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        
5
ответ дан jjrscott 17 August 2018 в 13:50
поделиться
  • 1
    Все это частные API-интерфейсы – Priyal 25 June 2018 в 12:34
  • 2
    Да, они все частные. Как указано в принятом ответе deviceInfoForKey: является конфиденциальным. Поэтому все эти ключи тоже. – jjrscott 26 June 2018 в 21:14

Согласно информации, разбрызганной по сети, цвет устройства кодируется в серийном номере. Блог iFixit указывает, что в третьем и втором-последнем положениях хранятся данные: xxxxxxxxCCx Для iPhone 4 A4 указывает на черный цвет. Никто, кажется, не имеет кода для белого iPhone 4, что странно. Сообщение forum указывает, что может быть DZ. Кажется, что все просто знакомятся с информацией друг друга.

На другом сайте mydigitallife.com есть статья, в которой перечислены цветовые коды для разных старых моделей. В некоторых случаях три позиции должны считываться вместе, чтобы определить цвет. Согласно этому сайту, все модели iPhone 3Gs имеют 3N в позиции цветового кода; 3NP указывает «Черный 16GB 3Gs», а 3NQ указывает «Белые 16GB 3Gs». Оригинальный (2G) iPhone также использует все три позиции для указания размера (не было цветовых опций).

На SO уже есть ряд вопросов, которые помогут вам получить серийный номер устройства.

8
ответ дан Josh Caswell 17 August 2018 в 13:50
поделиться

Нет. Невозможно обнаружить внешний цвет любого устройства.

0
ответ дан Sander van't Veer 17 August 2018 в 13:50
поделиться

Как отмечали другие, нет, нет официального способа получить эту информацию. Apple четко знает (смотрите в iTunes при синхронизации), поэтому они могут сделать это доступным. Возможно, стоит поднять радар .

6
ответ дан Stephen Darlington 17 August 2018 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: