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

Posted

技术标签:

【中文标题】手表靠近嘴巴时如何启动应用程序【英文标题】:How to launch the application when the watch is near mouth 【发布时间】:2020-12-25 07:56:33 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

private SensorManager mSensorManager;

//register in #onResume

 mSensorManager.registerListener(this,  mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), SensorManager.SENSOR_DELAY_NORMAL);

当用户佩戴手表时,重力传感器测量的重力 x 分量在手向下时为 +9.8,当手向上朝向嘴时为 -9.8。当手表戴在右手上时,这些值会颠倒过来。由于向上或向下的值可能不精确,您可以留出一些空间,因此您可以使用 (7.0f) 的 GRAVITY THRESHOLD 来代替 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;

        
    

【讨论】:

以上是关于手表靠近嘴巴时如何启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我们如何向手表应用程序添加启动屏幕?

iOS WatchKit - 启动手表应用程序“SPErrorInvalidBundleNoGizmoBinaryMessage”时出错

如何在靠近 NFC(智能卡)时停止我的 Android NFC 应用程序循环

如何在 uiimage iOS 中围绕眼睛和嘴巴绘制正方形或圆形

Wear OS - 如何在设备重启时自动启动应用程序

苹果手表应用程序是不是有可能知道它是使用复杂界面启动的?