Stationary Development
When to Use
An application can call the Stationary module to obtain the device status, for example, whether the device is absolutely or relatively still.
For details about the APIs, see Stationary.
Device Status Type Parameters
Name | Description |
---|---|
still | Absolutely still. |
relativeStill | Relatively still. |
Parameters for Subscribing to Device Status events
Name | Value | Description |
---|---|---|
ENTER | 1 | Event indicating entering device status. |
EXIT | 2 | Event indicating exiting device status. |
ENTER_EXIT | 3 | Event indicating entering and exiting device status. |
Returned Device Status Parameters
Name | Value | Description |
---|---|---|
ENTER | 1 | Entering device status. |
EXIT | 2 | Exiting device status. |
Available APIs
Module | Name | Description |
---|---|---|
ohos.stationary | on(activity: ActivityType, event: ActivityEvent, reportLatencyNs: number, callback: Callback<ActivityResponse>): void | Subscribes to the device status. This API uses an asynchronous callback to return the result. |
ohos.stationary | once(activity: ActivityType, callback: Callback<ActivityResponse>): void | Obtains the device status. This API uses an asynchronous callback to return the result. |
ohos.stationary | off(activity: ActivityType, event: ActivityEvent, callback?: Callback<ActivityResponse>): void | Unsubscribes from the device status. |
Constraints
The device must support the acceleration sensor.
Currently, only the algorithm framework is provided. The API test framework returns the following result: data={"type":3,"value":-1}.
If the relative stationary and absolute stationary capabilities are required, you must implement them in device_status/libs/src/algorithm. The following code snippet is for reference:
algoPara_.resultantAcc =
sqrt((algoPara_.x * algoPara_.x) + (algoPara_.y * algoPara_.y) + (algoPara_.z * algoPara_.z));
if ((algoPara_.resultantAcc > RESULTANT_ACC_LOW_THRHD) && (algoPara_.resultantAcc < RESULTANT_ACC_UP_THRHD)) {
if (state_ == STILL) {
return;
}
counter_--;
if (counter_ == 0) {
counter_ = COUNTER_THRESHOLD;
UpdateStateAndReport(VALUE_ENTER, STILL, TYPE_ABSOLUTE_STILL);
}
} else {
counter_ = COUNTER_THRESHOLD;
if (state_ == UNSTILL) {
return;
}
UpdateStateAndReport(VALUE_EXIT, UNSTILL, TYPE_ABSOLUTE_STILL);
}
How to Develop
-
Subscribe to the event indicating entering the absolute still state, and the event is reported every 1 second.
import stationary from '@ohos.stationary'; import { BusinessError } from '@ohos.base'; let reportLatencyNs = 1000000000; try { stationary.on('still', stationary.ActivityEvent.ENTER, reportLatencyNs, (data) => { console.log('data='+ JSON.stringify(data)); }) } catch (error) { let message = (error as BusinessError).message; console.error('stationary on failed:' + message); }
-
Obtain the event indicating entering the absolute still state.
import stationary from '@ohos.stationary'; import { BusinessError } from '@ohos.base'; try { stationary.once('still', (data) => { console.log('data='+ JSON.stringify(data)); }) } catch (error) { let message = (error as BusinessError).message; console.error('stationary once failed:' + message); }
-
Unsubscribe from the event indicating entering the absolute still state.
import stationary from '@ohos.stationary'; import { BusinessError } from '@ohos.base'; try { stationary.off('still', stationary.ActivityEvent.ENTER, (data) => { console.log('data='+ JSON.stringify(data)); }) } catch (error) { let message = (error as BusinessError).message; console.error('stationary off failed:' + message); }