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 捕获错误日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Flutter与WebView通信方案示例详解

    Flutter与WebView通信方案示例详解

    这篇文章主要为大家介绍了Flutter与WebView通信方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android日期和时间选择器实现代码

    Android日期和时间选择器实现代码

    这篇文章主要为大家详细介绍了Android日期和时间选择器实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android studio实现菜单效果

    Android studio实现菜单效果

    这篇文章主要为大家详细介绍了Android studio实现菜单效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Android 中Volley二次封装并实现网络请求缓存

    Android 中Volley二次封装并实现网络请求缓存

    这篇文章主要介绍了Android 中Volley二次封装并实现网络请求缓存的相关资料,希望通过本文能帮助到大家,彻底会使用Volley,需要的朋友可以参考下
    2017-09-09
  • android读取扫码模组数据的方法

    android读取扫码模组数据的方法

    这篇文章主要为大家详细介绍了android读取扫码模组数据的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 浅析Android手机卫士读取联系人

    浅析Android手机卫士读取联系人

    这篇文章主要介绍了浅析Android手机卫士读取联系人的相关内容,通过getContentResolver()方法获取获取ContentResolver内容解析器对象,对android手机卫士读取联系人相关知识感兴趣的朋友参考下吧
    2016-04-04
  • Kotlin中实体类的创建方式

    Kotlin中实体类的创建方式

    这篇文章主要介绍了Kotlin中实体类的创建方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android基于高德地图完全自定义Marker的实现方法

    Android基于高德地图完全自定义Marker的实现方法

    这篇文章主要给大家介绍了关于Android基于高德地图完全自定义Marker的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 详解dex优化对Arouter查找路径的影响

    详解dex优化对Arouter查找路径的影响

    dex简单说就是优化后的android版.exe。每个apk安装包里都有。相对于PC上的java虚拟机能运行.class,android上的Davlik虚拟机能运行.dex。本文将着重介绍dex优化对Arouter查找路径的影响
    2021-06-06

最新评论