欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

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

时间:2021-05-13 08:15:19|栏目:Android代码|点击:

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车牌识别系统EasyPR使用详解

栏    目:Android代码

下一篇:Android捕获点击事件范围的方法

本文标题:Android实现检测手机摇晃的监听器

本文地址:http://www.codeinn.net/misctech/120798.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有