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

 更新时间:2016年12月27日 16:58:34   作者:15910419554  
本文给大家分享一段代码实现检测手机摇晃的监听器,代码简单易懂,非常不错,感兴趣的朋友参考下吧

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实现检测手机摇晃的监听器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android系统对话框使用详解(最详细)

    Android系统对话框使用详解(最详细)

    这篇文章主要介绍了Android系统对话框使用详解(最详细),需要的朋友可以参考下
    2017-10-10
  • React Native 实现热更新并自动签名打包功能

    React Native 实现热更新并自动签名打包功能

    这篇文章主要介绍了React Native 实现热更新并自动签名打包,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android 给空白包签名并上传审核

    Android 给空白包签名并上传审核

    之前公司app在腾讯开放平台认领应用时,涉及了一个问题:就是给空白包签名。然后再上传上去审核,通过本文给大家介绍android 给空白包签名并上传审核,对android空白包签名相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • AndroidStudio接入Unity工程并实现相互跳转的示例代码

    AndroidStudio接入Unity工程并实现相互跳转的示例代码

    这篇文章主要介绍了AndroidStudio接入Unity工程并实现相互跳转,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • android自定义View实现手势解锁

    android自定义View实现手势解锁

    这篇文章主要为大家详细介绍了android自定义View实现手势解锁,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • RecyclerView 源码浅析测量 布局 绘制 预布局

    RecyclerView 源码浅析测量 布局 绘制 预布局

    这篇文章主要介绍了RecyclerView 源码浅析测量 布局 绘制 预布局,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android相机启动加速详解

    Android相机启动加速详解

    本篇文章给大家详细分析了Android实现相机启动加速的相关知识点内容以及实例代码,有兴趣的朋友参考下。
    2018-07-07
  • Android双向选择控件DoubleSeekBar使用详解

    Android双向选择控件DoubleSeekBar使用详解

    这篇文章主要为大家详细介绍了Android双向选择控件DoubleSeekBar的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • Android实现QQ图片说说照片选择效果

    Android实现QQ图片说说照片选择效果

    这篇文章主要为大家详细介绍了Android实现QQ图片说说照片选择效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android中的Fragment类使用进阶

    Android中的Fragment类使用进阶

    这篇文章主要介绍了Android中的Fragment类使用进阶,重点讲解了Fragment与Activity的交互以及Fragment间的数据传递,需要的朋友可以参考下
    2016-04-04

最新评论