Как я могу проверить наличие гироскопа на устройстве? - PullRequest
6 голосов
/ 02 июня 2011

Просто интересно, могу ли я проверить, есть ли на устройстве (iPhone, iPad, iPod или iOS-устройствах) гироскоп?

Ответы [ 3 ]

13 голосов
/ 02 июня 2011
- (BOOL) isGyroscopeAvailable
{
#ifdef __IPHONE_4_0
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    BOOL gyroAvailable = motionManager.gyroAvailable;
    [motionManager release];
    return gyroAvailable;
#else
    return NO;
#endif

}

См. Также мою запись в этом блоге, чтобы узнать, можно ли проверить различные возможности на устройствах iOS http://www.makebetterthings.com/blogs/iphone/check-ios-device-capabilities/

3 голосов
/ 18 июня 2011

В класс диспетчера движений CoreMotion встроено свойство для проверки доступности оборудования. Метод Saurabh потребует от вас обновлять свое приложение каждый раз, когда выходит новое устройство с гироскопом (iPad 2 и т. Д.). Вот пример кода с использованием документированного свойства Apple для проверки доступности гироскопа:

CMMotionManager *motionManager = [[[CMMotionManager alloc] init] autorelease];

if (motionManager.gyroAvailable)
{
    motionManager.deviceMotionUpdateInterval = 1.0/60.0;
    [motionManager startDeviceMotionUpdates];
}

См. документацию для получения дополнительной информации.

1 голос
/ 24 марта 2012

Я думаю, что ответы @Saurabh и @Andrew Theis верны лишь частично.

Это более полное решение:

- (BOOL) isGyroscopeAvailable
{
// If the iOS Deployment Target is greater than 4.0, then you
// can access the gyroAvailable property of CMMotionManager
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    BOOL gyroAvailable = motionManager.gyroAvailable;
    [motionManager release];
    return gyroAvailable;
// Otherwise, if you are supporting iOS versions < 4.0, you must check the
// the device's iOS version number before accessing gyroAvailable
#else
    // Gyro wasn't available on any devices with iOS < 4.0
    if ( SYSTEM_VERSION_LESS_THAN(@"4.0") )
        return NO;
    else
    {
        CMMotionManager *motionManager = [[CMMotionManager alloc] init];
        BOOL gyroAvailable = motionManager.gyroAvailable;
        [motionManager release];
        return gyroAvailable;
    }
#endif
}

Где SYSTEM_VERSION_LESS_THAN() определено в этом ответе StackOverflow .

...