欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现检测手机摇晃的监听器

程序员文章站 2024-02-25 17:43:15
android 检测手机摇晃的监听器,实现代码如下所示: public class shakelistener implements sensoreventlis...

android 检测手机摇晃的监听器,实现代码如下所示:

public class shakelistener implements sensoreventlistener {
  // 速度阈值,当摇晃速度达到这值后产生作用
  private static final int speed_shreshold = 3000;
  // 两次检测的时间间隔
  private static final int uptate_interval_time = 70;
  // 传感器管理器
  private sensormanager sensormanager;
  // 传感器
  private sensor sensor;
  // 重力感应监听器
  private onshakelistener onshakelistener;
  // 上下文
  private context mcontext;
  // 手机上一个位置时重力感应坐标
  private float lastx;
  private float lasty;
  private float lastz;
  // 上次检测时间
  private long lastupdatetime;
  // 构造器
  public shakelistener(context c) {
   // 获得监听对象
   mcontext = c;
   start();
  }
  // 开始
  public void start() {
   // 获得传感器管理器
   sensormanager = (sensormanager) mcontext
      .getsystemservice(context.sensor_service);
   if (sensormanager != null) {
     // 获得重力传感器
     sensor = sensormanager.getdefaultsensor(sensor.type_accelerometer);
   }
   // 注册
   if (sensor != null) {
     sensormanager.registerlistener(this, sensor,
        sensormanager.sensor_delay_game);
   }
  }
  // 停止检测
  public void stop() {
   sensormanager.unregisterlistener(this);
  }
  // 设置重力感应监听器
  public void setonshakelistener(onshakelistener listener) {
   onshakelistener = listener;
  }
  // 重力感应器感应获得变化数据
  public void onsensorchanged(sensorevent event) {
   // 现在检测时间
   long currentupdatetime = system.currenttimemillis();
   // 两次检测的时间间隔
   long timeinterval = currentupdatetime - lastupdatetime;
   // 判断是否达到了检测时间间隔
   if (timeinterval < uptate_interval_time)
     return;
   // 现在的时间变成last时间
   lastupdatetime = currentupdatetime;
   // 获得x,y,z坐标
   float x = event.values[0];
   float y = event.values[1];
   float z = event.values[2];
   // 获得x,y,z的变化值
   float deltax = x - lastx;
   float deltay = y - lasty;
   float deltaz = z - lastz;
   // 将现在的坐标变成last坐标
   lastx = x;
   lasty = y;
   lastz = z;
   //sqrt 返回最近的双近似的平方根
   double speed = math.sqrt(deltax * deltax + deltay * deltay + deltaz
      * deltaz)/ timeinterval * 10000;
//  mylog.v("thelog", "===========log===================");
   // 达到速度阀值,发出提示
   if (speed >= speed_shreshold) {
     onshakelistener.onshake();
   }
  }
  public void onaccuracychanged(sensor sensor, int accuracy) {
}
// 摇晃监听接口
public interface onshakelistener {
  public void onshake();
}
}

以上所述是小编给大家介绍的android实现检测手机摇晃的监听器,希望对大家有所帮助