Android 当手表靠近嘴时如何启动应用程序

Android 当手表靠近嘴时如何启动应用程序,android,android-wear-2.0,Android,Android Wear 2.0,我想开发一个android wear应用程序,当手表靠近嘴边时,它会倾听用户的声音。我怎样才能检测到这种运动?我设计了一个新冠病毒-19佩戴应用程序,它具有类似的功能,可以防止用户触摸他们的嘴/眼睛(面部区域)。 您可以注册重力传感器监听器,并检测用户何时向嘴/头部区域举起手 private SensorManager mSensorManager; //register in #onResume mSensorManager.registerListener(this, mSensor

我想开发一个android wear应用程序,当手表靠近嘴边时,它会倾听用户的声音。我怎样才能检测到这种运动?

我设计了一个新冠病毒-19佩戴应用程序,它具有类似的功能,可以防止用户触摸他们的嘴/眼睛(面部区域)。 您可以注册重力传感器监听器,并检测用户何时向嘴/头部区域举起手

private SensorManager mSensorManager;

//register in #onResume

 mSensorManager.registerListener(this,  mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), SensorManager.SENSOR_DELAY_NORMAL);
当用户佩戴手表时,当手向下时,重力传感器测量的重力x分量为+9.8;当手向上朝向嘴时,重力x分量为-9.8。当手表戴在右手上时,这些值是相反的。由于向上或向下的值可能不精确,您可以留出一些空间,因此可以使用重力阈值(
7.0f
)而不是9.8。你也可以考虑上下运动成功,如果它小于一个阈值<代码> 2000000000 /代码>纳秒:

// An movement to the mouth and down that takes more than 2 seconds will not be registered (in nanoseconds).
    private static final long TIME_THRESHOLD_NS = TimeUnit.SECONDS.toNanos(2);

    private static final float HAND_DOWN_GRAVITY_X_THRESHOLD = -.040f;
    private static final float HAND_UP_GRAVITY_X_THRESHOLD = -.010f;

 @Override
    public void onSensorChanged(SensorEvent event) {
        detectMouthTouched(event.values[0], event.timestamp);
    }

private void detectMouthTouched(float xGravity, long timestamp) {

        if ((xGravity <= HAND_DOWN_GRAVITY_X_THRESHOLD)
                || (xGravity >= HAND_UP_GRAVITY_X_THRESHOLD)) {

            if (timestamp - mLastTime < TIME_THRESHOLD_NS) {
                // Hand is down when yValue is negative.
                onFaceTouched(xGravity <= HAND_DOWN_GRAVITY_X_THRESHOLD);
            }

            mLastTime = timestamp;
        }
    }

    
    private void onFaceTouched(boolean handDown) {
        if (mHandDown != handDown) {
            mHandDown = handDown;

        }
    }
//超过2秒的嘴和嘴的移动将不会被记录(以纳秒为单位)。
私有静态最终长时间\u阈值\u NS=时间单位。秒。音调(2);
私人静态最终浮动手向下重力阈值=-0.040f;
私人静态最终浮动上浮重力阈值=-0.010f;
@凌驾
传感器更改时的公共无效(传感器事件){
detectMouthTouched(event.values[0],event.timestamp);
}
私有void detectMouthTouched(浮点X重力,长时间戳){
如果((重力=手向上重力阈值)){
if(时间戳-mLastTime<时间阈值){
//当Y值为负时,手向下。
onFaceTouched(X重力)