openharmony 鸿蒙 stationary-guidelines

2025-06-06 浏览 (1)

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

NameDescription
stillAbsolutely still.
relativeStillRelatively still.

Parameters for Subscribing to Device Status events

NameValueDescription
ENTER1Event indicating entering device status.
EXIT2Event indicating exiting device status.
ENTER_EXIT3Event indicating entering and exiting device status.

Returned Device Status Parameters

NameValueDescription
ENTER1Entering device status.
EXIT2Exiting device status.

Available APIs

NameDescription
on(activity: ActivityType, event: ActivityEvent, reportLatencyNs: number, callback: Callback<ActivityResponse>): voidSubscribes to the device status. This API uses an asynchronous callback to return the result.
once(activity: ActivityType, callback: Callback<ActivityResponse>): voidObtains the device status. This API uses an asynchronous callback to return the result.
off(activity: ActivityType, event: ActivityEvent, callback?: Callback<ActivityResponse>): voidUnsubscribes 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

  1. Subscribe to the event indicating entering the absolute still state, and the event is reported every 1 second.

    import { stationary } from '@kit.MultimodalAwarenessKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    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);
    }
    
  2. Obtain the event indicating entering the absolute still state.

    import { stationary } from '@kit.MultimodalAwarenessKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    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);
    }
    
  3. Unsubscribe from the event indicating entering the absolute still state.

    import { stationary } from '@kit.MultimodalAwarenessKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    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);
    }
    

你可能感兴趣的鸿蒙文章

harmony 鸿蒙Multimodal Awareness Kit

harmony 鸿蒙Device Status Awareness Development

harmony 鸿蒙Motion Awareness Development

harmony 鸿蒙Introduction to Multimodal Awareness Kit

  • 所属分类: 后端技术
  • 本文标签: 软件 鸿蒙
  • 版权声明: 本文链接 https://seaxiang.com/blog/W9cZWE