如何使用android检测震动事件?如何检测震动方向?

我想在震动发生时更改imageview中的图像.

推荐答案

从代码的Angular 来看,您需要实现SensorListener:

public class ShakeActivity extends Activity implements SensorListener

您需要购买SensorManager:

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);

并用所需的标志注册此传感器:

sensorMgr.registerListener(this,
SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_GAME);

在onSensorChange()方法中,您可以确定它是否是摇晃:

public void onSensorChanged(int sensor, float[] values) {
  if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
    long curTime = System.currentTimeMillis();
    // only allow one update every 100ms.
    if ((curTime - lastUpdate) > 100) {
      long diffTime = (curTime - lastUpdate);
      lastUpdate = curTime;

      x = values[SensorManager.DATA_X];
      y = values[SensorManager.DATA_Y];
      z = values[SensorManager.DATA_Z];

      float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

      if (speed > SHAKE_THRESHOLD) {
        Log.d("sensor", "shake detected w/ speed: " + speed);
        Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
      }
      last_x = x;
      last_y = y;
      last_z = z;
    }
  }
}

抖动阈值定义为:

private static final int SHAKE_THRESHOLD = 800;

还有一些其他的方法可以检测抖动.请看这个link.(如果该链接不工作或链接失效,则为look at this web archive).

看看这example个android shake detect listener.

Note: SensorListener已被弃用.我们可以用SensorEventListener代替.Here is a quick example using SensorEventListener.

谢谢.

Android相关问答推荐

如何使用单个代码库使用不同的firebase项目创建多个应用程序ID apk

Kotlin多平台向导,不兼容版本(ANP 8.2.0)ANP 8.1.2

如何处理穿戴构图上的长点击事件?

关闭导致Kotlin中的内存泄漏?

在模块中找到重复的类com.google.Firebase.auth.ktx.AuthKt||Android Studio

如何在初始合成期间在可组合函数中调用/获取远程API中的数据[防止无限重组]

如何在使用带有底部导航组件的片段管理器时更改片段工具栏的标签

在 kotlin 协同 routine 中,如何将数据范围限定为请求路径(以 MDC 为例)?

ArrayList 上的 Android intent.getParcelableArrayListExtra 引发 Nullpointer 异常

Android Studio:按下前缀键:切换 Logcat 格式

Android apk 不工作

如何将可重用的 ExtendedFloatingActionButton 与可重用的脚手架链接起来

为卡片的上半部分添加一个边框,用圆角半径组合

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

Jetpack Compose Material3 禁用 ListItem

Kotlin 调用带参数的函数 Any is xxx ||任何 yyy 都不起作用

可扩展性 Qt 5.15 Android

为什么使用 React Native 和 expo 创建的 APK 体积这么大?

将生成的 AAR 与 Composables 一起使用时未解决的参考