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

发布时间 - 2026-01-10 22:09:44    点击率:

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编程自定义View时添加自己的监听器示例  # Android中ScrollView实现滑动距离监听器的方法  # Android编程之监听器用法实例分析  # Android编程之监听器的实现方法  # Android实现静态广播监听器的方法  # android Animation监听器AnimationListener的使用方法)  # Android控件系列之Button以及Android监听器使用介绍  # android监听器实例代码  # 两次  # 管理器  # 小编  # 在此  # 感应器  # 达到了  # 给大家  # 所示  # 所述  # 给我留言  # 感谢大家  # 判断是否  # 疑问请  # 有任何  # Sensor 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用腾讯建站主机快速创建免费网站?  详解Huffman编码算法之Java实现  高端企业智能建站程序:SEO优化与响应式模板定制开发  手机软键盘弹出时影响布局的解决方法  如何在IIS中配置站点IP、端口及主机头?  微信小程序 require机制详解及实例代码  JavaScript如何实现错误处理_try...catch如何捕获异常?  如何在IIS服务器上快速部署高效网站?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Android 常见的图片加载框架详细介绍  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  JavaScript如何实现倒计时_时间函数如何精确控制  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何登录建站主机?访问步骤全解析  java获取注册ip实例  Linux后台任务运行方法_nohup与&使用技巧【技巧】  javascript中对象的定义、使用以及对象和原型链操作小结  文字头像制作网站推荐软件,醒图能自动配文字吗?  LinuxShell函数封装方法_脚本复用设计思路【教程】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何在阿里云香港服务器快速搭建网站?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何快速搭建FTP站点实现文件共享?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Angular 表单中正确绑定输入值以确保提交与验证正常工作  如何在万网自助建站中设置域名及备案?  如何用免费手机建站系统零基础打造专业网站?  Laravel如何实现API资源集合?(Resource Collection教程)  如何正确选择百度移动适配建站域名?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何快速搭建高效可靠的建站解决方案?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  网站制作价目表怎么做,珍爱网婚介费用多少?  简单实现Android验证码  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  lovemo网页版地址 lovemo官网手机登录  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  JavaScript如何实现类型判断_typeof和instanceof有什么区别