journey.sensors was introduced in version 4.85.0 of the JourneyApps Runtime and version 22.4.1 of the JourneyApps Container.
Currently only supported on Android and iOS.
Returns information about the device's accelerometer, compass and orientation data.
Supported fields
getCapabilities()
To retrieve a device's supported sensor capabilities.
main.ts
var capabilities =awaitjourney.sensors.getCapabilities();view.accelerometer_supported =capabilities.accelerometerIsSupported;view.compass_supported =capabilities.compassIsSupported;view.orientation_supported =capabilities.orientationIsSupported;
accelerometer.read()
Returns accelerometer data captured at a specific point in time.
Acceleration values include the effect of gravity (9.81 m/s^2), so that when a device lies flat and facing up, x, y, and z values returned should be 0, 0, and 9.81.
Properties returned:
x: Number value
y: Number value
z: Number value
timestamp: Unix Timestamp when sample was taken
accelerometer.registerListener()
Listeners supply an onData callback which will be invoked with the data argument set to the same format as a read function call. The onError callback will be called on an error condition, if called, no subsequent onData callbacks are executed. The argument provided to the onError function is a string error message.
Listener options:
Currently the only option supported for all sensors is the sampling period in milliseconds.
watchRemover =journey.sensors.accelerometer.registerListener(functiononData(result) {// Do something with result here, e.g. var listenerTimestamp =result.timestamp.toString(); },functiononError(error) {console.log('Received error', error); }, { periodMs:1000 });
compass.read()
Returns compass data captured at a specific point in time.
Properties returned:
magneticHeading: The heading in degrees from 0-359.99 at a single moment in time. (Number)
trueHeading: The heading relative to the geographic North Pole in degrees 0-359.99 at a single moment in time. A negative value indicates that the true heading can't be determined. (Number)
headingAccuracy: The deviation in degrees between the reported heading and the true heading. (Number)
The below example code shows a view that allows a user to read and start/stop watching accelerometer data. The returned data saved to LocalDB objects and is presented in tables.
// This function is called when the app navigates to this view (using a link)functioninit() {// initialize any data here that should be available when the view is shownview.watch_period_ms =1000;}// This function is called when the user returns to this view from another viewfunctionresume(from) { }functionread() {// For accelerometer data use journey.sensors.accelerometer// For compass data use journey.sensors.compass// For orientation data use journey.sensors.orientationvar result =journey.sensors.accelerometer.read();view.read_results =Object.keys(result).map(function (key) {returnLocalDB.data_row.create({ key: key, value: result[key] }) });view.read_timestamp =result.timestamp.toString();}var watchRemover;functionwatch() {// For accelerometer data use journey.sensors.accelerometer// For compass data use journey.sensors.compass// For orientation data use journey.sensors.orientation watchRemover =journey.sensors.accelerometer.registerListener(functiononData(result) {if (view.watch_results &&view.watch_results.length) {view.watch_results.map(function (item) { item.destroy() }); }view.watch_results =Object.keys(result).map(function (key) {returnLocalDB.data_row.create({ key: key, value: result[key] }) });view.listener_timestamp =result.timestamp.toString();journey.forceDigest(); },functiononError(error) {console.log('Received error', error); }, { periodMs:view.watch_period_ms });view.is_watching =true;}functionstopWatch() {if (watchRemover) {watchRemover(); watchRemover =null; };view.is_watching =false;}
// This function is called when the app navigates to this view (using a link)asyncfunctioninit() {// initialize any data here that should be available when the view is shownview.watch_period_ms =1000;}// This function is called when the user returns to this view from another viewasyncfunctionresume(from:ResumeFrom) { }asyncfunctionread() {constresult=awaitjourney.sensors.accelerometer.read();view.read_results =Object.keys(result).map(key =>LocalDB.data_row.create({ key: key, value: result[key] }));view.read_timestamp =result.timestamp.toString();}letwatchRemover: () =>void;asyncfunctionwatch() { watchRemover =awaitjourney.sensors.accelerometer.registerListener( result => {if (view.watch_results?.length) {view.watch_results.map(item =>item.destroy()); }view.watch_results =Object.keys(result).map(key =>LocalDB.data_row.create({ key: key, value: result[key] }));view.listener_timestamp =result.timestamp.toString();journey.forceDigest(); },console.log, { periodMs:view.watch_period_ms });view.is_watching =true;}asyncfunctionstopWatch() {if (watchRemover) {awaitwatchRemover(); watchRemover =null; }view.is_watching =false;}