如何使用SensorListener获取设备是否震动?

发布于 2024-12-19 13:54:27 字数 499 浏览 2 评论 0原文

可能的重复:
Android:我想摇晃它!
如何使用加速计测量 Android 应用程序的距离开发
如何实现 SensorListener?

如果设备当时没有晃动,则会显示警报对话框,那么如何设备是否晃动?

Possible Duplicate:
Android: I want to shake it!
How to use Accelerometer to measure distance for Android Application Development
How to Implement SensorListener?

If Device is not Shaking at that time the Alertdialog is Displayed so how to get the device is shaking or not?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦萦几度 2024-12-26 13:54:27

使用此代码检查设备是否震动

// 需要实现 SensorListener

public class ShakeActivity extends Activity implements SensorListener {
    // For shake motion detection.
    private SensorManager sensorMgr;
    private long lastUpdate = -1;
    private float x, y, z;
    private float last_x, last_y, last_z;
    private static final int SHAKE_THRESHOLD = 800;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        ...... // other initializations
    // start motion detection
    sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
    boolean accelSupported = sensorMgr.registerListener(this,
        SensorManager.SENSOR_ACCELEROMETER,
        SensorManager.SENSOR_DELAY_GAME);

    if (!accelSupported) {
        // on accelerometer on this device
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
    }
    }

    protected void onPause() {
    if (sensorMgr != null) {
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
        sensorMgr = null;
        }
    super.onPause();
    }

    public void onAccuracyChanged(int arg0, int arg1) {
    // TODO Auto-generated method stub
    }

    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) {
            // yes, this is a shake action! Do something about it!
                // if device is shake with threshold then this condition become true..
                // you can put your code here... 
        }
        last_x = x;
        last_y = y;
        last_z = z;
        }
    }
    }
}

Use this code for check device is shake or not

// Need to implement SensorListener

public class ShakeActivity extends Activity implements SensorListener {
    // For shake motion detection.
    private SensorManager sensorMgr;
    private long lastUpdate = -1;
    private float x, y, z;
    private float last_x, last_y, last_z;
    private static final int SHAKE_THRESHOLD = 800;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        ...... // other initializations
    // start motion detection
    sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
    boolean accelSupported = sensorMgr.registerListener(this,
        SensorManager.SENSOR_ACCELEROMETER,
        SensorManager.SENSOR_DELAY_GAME);

    if (!accelSupported) {
        // on accelerometer on this device
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
    }
    }

    protected void onPause() {
    if (sensorMgr != null) {
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
        sensorMgr = null;
        }
    super.onPause();
    }

    public void onAccuracyChanged(int arg0, int arg1) {
    // TODO Auto-generated method stub
    }

    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) {
            // yes, this is a shake action! Do something about it!
                // if device is shake with threshold then this condition become true..
                // you can put your code here... 
        }
        last_x = x;
        last_y = y;
        last_z = z;
        }
    }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文