как я могу проверить наличие гироскопа на устройстве?

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


person user757812    schedule 02.06.2011    source источник


Ответы (3)


- (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/

person Saurabh    schedule 02.06.2011
comment
Какое преимущество здесь дает использование #ifdef? - person codeperson; 08.01.2012
comment
@jonsibley CMMotionManager доступен только на iPhone OS 4 .. если мы попытаемся использовать его в более ранних версиях, он не будет компилироваться - person Saurabh; 08.01.2012
comment
Я считаю, что __IPHONE_4_0 - это просто определенная константа. Кажется, что правильный способ сделать это - использовать __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 (согласно этому вопросу StackOverflow: stackoverflow .com / questions / 3955331 / if-iphone-4-0-on-ipad). - person codeperson; 24.03.2012

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

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

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

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

person Andrew Theis    schedule 17.06.2011

Я считаю, что ответы @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.

person codeperson    schedule 24.03.2012
comment
Я совершенно сбит с толку, глядя на все эти ответы на этой странице. @jonsibley Правда ли, что метод gyroAvailable доступен только в IOS4 +? - person ShayanK; 23.04.2012