手表靠近嘴巴时如何启动应用程序
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 应用程序循环