Могу ли я определить / как, если устройство имеет вибрацию или нет? - PullRequest
4 голосов
/ 14 августа 2011

У меня есть некоторые настройки, которые включают / отключают вибрацию для определенных действий, но я считаю бессмысленным отображать их, если устройство не обладает способностью вибрировать. Есть ли способ проверить, использует ли человек iPod touch и имеет ли он вибрацию?

Ответы [ 2 ]

5 голосов
/ 14 августа 2011

Я не уверен, что есть способ сделать это, кроме проверки моделей, что, вероятно, не очень хороший подход. Я знаю, что яблоко обеспечивает:

 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

Если устройство может вибрировать, оно будет. На устройствах без вибрации ничего не поделаешь. Есть еще один звонок:

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

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

Может быть, лучше просто иметь настройки и дать некоторые объяснения по поводу настройки, потому что пользователь может захотеть услышать звуковой сигнал, когда у него нет вибрирующего устройства. Может быть, вызвать настройку как-то иначе, чем «Вибрационное оповещение вкл / выкл».

3 голосов
/ 14 августа 2011

Этот код должен это делать - имейте в виду, что он «предполагает», что 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;
}

Только что отредактировано, чтобы машинный вызов не выполнял много маленьких malloc каждый раз, когда он вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...