2010-03-26 2 views
5

Разработка приложения, которое вибрирует при возникновении определенного события. У меня есть настройка для включения или выключения функции вибрирования.Определение, может ли устройство вибрировать - iPhone против iPod Touch

Я хотел бы отключить отображение вибровызова для таких устройств, как iPod Touch, которые не обладают вибрацией. Я знаю, что могу сделать это путем определения модели устройства с помощью:

UIDevice *thisDevice = [UIDevice currentDevice]; 
    modelOfDevice = [thisDevice model]; 

можно затем отключить опцию Вибровызов в зависимости от modelOfDevice .. (т.е. не отображать его для IPod Touch). Это работает, но я думаю, что это плохая форма. Например, если будущие устройства iPod Touch будут включать функции Vibrate, это решение сломается.

Итак, вопрос .. Как проверить, есть ли устройство, способное вибрировать?

Любые предложения оценены. Заранее спасибо.

+0

Или, например, iPad - может ли он вибрировать? Я соглашаюсь на плохую форму (проголосовать!) Есть ли у какого-то «устройства есть возможность: вибрировать» API? – Olie

ответ

1

Если вы просто используете AudioServicesPlaySystemSound (kSystemSoundID_Vibrate), он вибрирует там, где он может, и ничего не делает там, где он не может, как указано в документации Apple, чтобы вы могли пропустить обнаружение. кода [статья] [1] говорит, что только может сделать AudioServicesPlayAlertSound (kSystemSoundID_Vibrate) вибрировать, где это возможно, или звуковой сигнал, где нет (IPod Touch еще пищать/нажатие кнопки мыши-звуковую способность)

[1]: http://blog.mugunthkumar.com/coding/iphone-tutorial-better-way-to-check-capabilities-of-ios-devices/ статей

0

Я не знаю, можно ли проверить, обладает ли устройство вибрацией.

Но можно определить тип устройства.

- (NSString *)platformRawString 
{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithUTF8String:machine]; 
    free(machine); 
    return platform; 
} 

- (NSString *)platformNiceString { 
    NSString *platform = [self platformRawString]; 
    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; 
    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; 
    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; 
    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; 
    if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; 
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; 
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; 
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone6 Plus"; 
    if ([platform isEqualToString:@"iPod1,1"])  return @"iPod Touch 1G"; 
    if ([platform isEqualToString:@"iPod2,1"])  return @"iPod Touch 2G"; 
    if ([platform isEqualToString:@"iPod3,1"])  return @"iPod Touch 3G"; 
    if ([platform isEqualToString:@"iPod4,1"])  return @"iPod Touch 4G"; 
    if ([platform isEqualToString:@"iPad1,1"])  return @"iPad 1"; 
    if ([platform isEqualToString:@"iPad2,1"])  return @"iPad 2 (WiFi)"; 
    if ([platform isEqualToString:@"iPad2,2"])  return @"iPad 2 (GSM)"; 
    if ([platform isEqualToString:@"iPad2,3"])  return @"iPad 2 (CDMA)"; 
    if ([platform isEqualToString:@"iPad3,1"])  return @"iPad 3 (WiFi)"; 
    if ([platform isEqualToString:@"iPad3,2"])  return @"iPad 3 (4G,2)"; 
    if ([platform isEqualToString:@"iPad3,3"])  return @"iPad 3 (4G,3)"; 
    if ([platform isEqualToString:@"i386"])   return @"Simulator"; 
    if ([platform isEqualToString:@"x86_64"])  return @"Simulator"; 
    return platform; 
} 

Вызвать метод platformNiceString.

NSString *device = [self platformNiceString]; 
if ([device isEqualToString: @"iPhone6 Plus"]) //do rest of the code here 

Но вам нужно будет идентифицировать каждое устройство вручную.

Смежные вопросы