Skip to content

Provides Attitude (Roll, Pitch & Heading) in degrees for both iOS and Android.

License

Notifications You must be signed in to change notification settings

dpyeates/react-native-attitude

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

react-native-attitude

This module provides device attitude (Roll, Pitch & Heading) in degrees for iOS and Android.
It uses a reference frame that assumes the user is looking 'through' the screen - typical to many augmented reality applications.
It uses Core Motion Quaternions on iOS and the Rotation Vector sensor on Android.

Getting started

yarn add react-native-attitude

or

npm install react-native-attitude --save

Since react-native 0.60 and higher, autolinking makes the installation process simpler.
If you are using React Native 0.60 or higher, no other installation steps are required.

Manual installation (react-native 0.59 and lower)

Manually link the library on iOS

Open RNAttitude.xcodeproj in Xcode

Drag RNAttitude.xcodeproj to your project on Xcode (usually under the Libraries group on Xcode):

xcode-add

Link libRNAttitude.a binary with libraries

Click on your main project file (the one that represents the .xcodeproj) select Build Phases and drag the static library from the Products folder inside the Library you are importing to Link Binary With Libraries (or use the + sign and choose library from the list):

xcode-link

Using CocoaPods

Update your Podfile

pod 'react-native-attitude', path: '../node_modules/react-native-attitude'
Manually link the library on Android

android/settings.gradle

include ':react-native-attitude'

project(':react-native-attitude').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-attitude/android')

android/app/build.gradle

dependencies {
...
implementation project(':react-native-attitude')
}

android/app/src/main/.../MainApplication.java

On top, where imports are:

import com.sensorworks.RNAttitudePackage;

Add the RNAttitudePackage class to your list of exported packages.

@Override
protected List<ReactPackage> getPackages() {
  return Arrays.asList(
    new MainReactPackage(),
    new RNAttitudePackage()
  );
}

Usage

Example

import Attitude from 'react-native-attitude';

Attitude.watch((payload) => {});

Methods


Details

isSupported()

Checks to see if attitude updates are supported on the device.
This always returns true on iOS devices.

const isSupported = await Attitude.isSupported();

setInterval()

Optionally request an update interval in ms. The default update rate is (approx) 20ms, i.e. 5Hz.
This is a request - updates may come slower than the rate you specify, but never faster.

// request updates once every second

Attitude.setInterval(1000);

setRotationl(['none', 'left' or 'right']])

Optionally tell the module if you would like the results rotated. This is typically used when the phone/device is in a rotated state. The module defaults to 'none', which for most devices means no rotation or 'portrait' screen orientation. Passing 'left' to setRotation is used when the device has rotated to landscape left (top of phone/device when you look at it is rotated left by 90 degrees). Passing 'right' to setRotation is used when the device has rotated to landscape right (top of phone/device when you look at it is rotated right by 90 degrees)

NOTE: Version 1 of this module did this automatically within the module but this sometimes meant there was a conflict between the native side and the javascript side. Version 2 of this modules pulls this out and makes it explicit.

// set the device rotation to either 'none', 'left' or 'right'

Attitude.setRotation('none'); // default
Attitude.setRotation('left'); 
Attitude.setRotation('right'); 

zero()

Levels pitch and roll according to the current attitude. This can be used to null the device if it is oriented away from level.

// level both pitch and roll 

Attitude.zero();

reset()

Resets any previous calls to zero().

Attitude.reset();

watch()

Attitude.watch(success);

Invokes the success callback whenever the attitude changes. The payload delivered via the callback is defined in the example below.

Returns a watchId (number).

Parameters:

Name Type Required Description
success function Yes Invoked at a default interval of 5hz This can be changed by using the setInterval method.

Example:

const watchId = Attitude.watch((payload) =>{

/*

payload.timestamp - sample time in ms referenced to January 1, 1970 UTC

payload.roll - roll in degrees -180<-->180

payload.pitch - pitch in degrees -90<-->90

payload.heading - heading in degrees 0-->360

*/

);

clearWatch()

Attitude.clearWatch(watchID);

Parameters:

Name Type Required Description
watchID number Yes Id as returned by watch().

stopObserving()

Attitude.stopObserving();

Stops observing for all attitude updates.

In addition, it removes all listeners previously registered.

Note that this method does nothing if the Attitude.watch(successCallback) method has not previously been called.

About

Provides Attitude (Roll, Pitch & Heading) in degrees for both iOS and Android.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published