У меня есть некоторые настройки, которые включают/отключают вибрацию для определенных действий, но я считаю бессмысленным отображать их, если устройство не имеет возможности вибрации. Есть ли способ проверить, использует ли человек iPod touch и есть ли у него вибрация?
Могу ли я определить/как, есть ли у устройства вибрация или нет?
Ответы (2)
Этот код должен сделать это — имейте в виду, что он «предполагает», что iPhone — единственное устройство с возможностью вибрации. Что на данный момент...
- (NSString *)machine
{
static NSString *machine = nil;
// we keep name around (its like 10 bytes....) forever to stop lots of little mallocs;
if(machine == nil)
{
char * name = nil;
size_t size;
// Set 'oldp' parameter to NULL to get the size of the data
// returned so we can allocate appropriate amount of space
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
// Allocate the space to store name
name = malloc(size);
// Get the platform name
sysctlbyname("hw.machine", name, &size, NULL, 0);
// Place name into a string
machine = [[NSString stringWithUTF8String:name] retain];
// Done with this
free(name);
}
return machine;
}
-(BOOL)hasVibration
{
NSString * machine = [self machine];
if([[machine uppercaseString] rangeOfString:@"IPHONE"].location != NSNotFound)
{
return YES;
}
return NO;
}
Просто отредактировано, чтобы машинный вызов не выполнял множество мелких операций при каждом вызове.
Я не уверен, что есть способ сделать это, кроме проверки модели, что, вероятно, не лучший подход. Я знаю, что яблоко обеспечивает:
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Если устройство может вибрировать, оно будет. На устройствах без вибрации ничего не получится. Есть еще звонок:
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
Этот будет вибрировать устройство, если у него есть возможность, или устройство издаст звуковой сигнал.
Возможно, было бы лучше просто иметь настройки и иметь некоторые пояснения по настройке, потому что пользователю может понадобиться звуковой сигнал, когда у него нет вибрирующего устройства. Возможно, назовите настройку как-то иначе, чем «Включение/выключение виброзвонка».