处理 Android 手机的震动事件

发布于 2022-10-15 07:24:51 字数 6613 浏览 15 评论 0

拿着手机使用晃,程序就能收到震动事件

  1. package com.gedankentank.android.sensor;
  2. import java.util.List;
  3. import android.hardware.Sensor;
  4. import android.hardware.SensorEvent;
  5. import android.hardware.SensorEventListener;
  6. import android.hardware.SensorManager;
  7. import android.util.Log;
  8. public class AccelerometerListener implements SensorEventListener {
  9.        
  10.         private SensorManager sensorManager;
  11.         private List<Sensor> sensors;
  12.         private Sensor sensor;
  13.         private long lastUpdate = -1;
  14.         private long currentTime = -1;
  15.        
  16.         private float last_x, last_y, last_z;
  17.         private float current_x, current_y, current_z, currenForce;
  18.         private static final int FORCE_THRESHOLD = 900;
  19.         private final int DATA_X = SensorManager.DATA_X;
  20.         private final int DATA_Y = SensorManager.DATA_Y;
  21.         private final int DATA_Z = SensorManager.DATA_Z;
  22.        
  23.         public AccelerometerListener(Activity parent) {
  24.                 SensorManager sensorService = (SensorManager)
  25.                         parent.getSystemService(Context.SENSOR_SERVICE);
  26.                 this.sensorManager = sensorManager;
  27.                 this.subscriber = subscriber;
  28.                 this.sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
  29.                 if (sensors.size() > 0) {
  30.             sensor = sensors.get(0);
  31.         }
  32.         }
  33.         public void start () {
  34.                 if (sensor!=null)  {
  35.                         sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
  36.                 }
  37.         }
  38.        
  39.         public void stop () {
  40.                 sensorManager.unregisterListener(this);
  41.         }
  42.        
  43.         public void onAccuracyChanged(Sensor s, int valu) {
  44.                
  45.                
  46.         }
  47.         public void onSensorChanged(SensorEvent event) {
  48.                
  49.                 if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3)
  50.                       return;
  51.                
  52.                 currentTime = System.currentTimeMillis();
  53.                
  54.                 if ((currentTime - lastUpdate) > 100) {
  55.                         long diffTime = (currentTime - lastUpdate);
  56.                         lastUpdate = currentTime;
  57.                        
  58.                         current_x = event.values[DATA_X];
  59.                         current_y = event.values[DATA_Y];
  60.                         current_z = event.values[DATA_Z];
  61.                        
  62.                         currenForce = Math.abs(current_x+current_y
  63.                                 +current_z - last_x - last_y - last_z) / diffTime * 10000;
  64.                        
  65.                         if (currenForce > FORCE_THRESHOLD) {
  66.                        
  67.                                 // Device has been shaken now go on and do something
  68.                                 // you could now inform the parent activity ...
  69.                                
  70.                         }
  71.                         last_x = current_x;
  72.                         last_y = current_y;
  73.                         last_z = current_z;
  74.                 }
  75.         }
  76. }

复制代码

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文