225_手机摇晃监听器ShakeListener

比如我们要做一个像微信摇一摇这样的功能
那么我们要用到android的传感器

我们可以写一个类实现SensorEventListener

public class ShakeListener implements SensorEventListener {
    
    //速度阈值,当摇晃速度达到这值后产生作用
    private static final int SPEED_SHRESHOLD = 8000;
    //两次检测的时间间隔
    private static final int UPTATE_INTERVAL_TIME = 100;

//传感器管理器
    private SensorManager sensorManager;
    //传感器
    private Sensor sensor;
    //重力感应监听器
    private OnShakeListener onShakeListener;
    //上下文
    private Context context;
    //手机上一个位置时重力感应坐标
    private float lastX;
    private float lastY;
    private float lastZ;

//上次检测时间
    private long lastUpdateTime;

//构造器
    public ShakeListener(Context c) {
        //获得监听对象
        context = c;
        start();
    }

//开始
    public void start() {
        //获得传感器管理器
        sensorManager = (SensorManager)context.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 interface OnShakeListener {
        public void onShake();
    }

//设置重力感应监听器
    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;

double speed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)/timeInterval * 10000;
        //达到速度阀值,发出提示
        if(speed >= SPEED_SHRESHOLD)
            onShakeListener.onShake();
    }

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}
}

创建对象回调

new ShakeListener(this).setOnShakeListener(new ShakeListener.OnShakeListener() {
            @Override
            public void onShake() {
            }
        });

225_手机摇晃监听器ShakeListener相关推荐

  1. Unity 手机摇晃检测

    很多手机游戏都会用到对手机摇晃的检测,废话不多说直接上代码. 目前测试力度设为2比较合适. using UnityEngine; using UnityEngine.Events;public cla ...

  2. Android——手机彩票摇晃选号(双色球) 实现原理

    实现思路:因为手机传感器每隔一段时间会发送采集到的数据包, 首先获取第一个数据包所在的三个轴的加速度值,记录, 当过一段时间之后再次获取三个轴的加速度值,计算增量,将相邻两个点的增量进行汇总,当达到预 ...

  3. Android加速度传感器实现“摇一摇”,带手机振动

    由于代码有点多,所以就分开写了,注释还算详细,方便学习 Activity package com.lmw.android.test; import android.app.Activity; impo ...

  4. 手机摇一摇功能音量大小跟系统音量一致

    源代码免费下载 布局文文件:main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  5. Android手机摇一摇功能的简单实现

    我需要做一个Android摇一摇的功能,网上我看了很多教程,都写的大同小异,很多了,最近慕课网上也有关于开发摇一摇教程的视屏,讲的很详细,可惜中间视屏少了两节! SensorManager :获取传感 ...

  6. HTML5+PHP+jQuery手机摇一摇换衣

    在上一篇文章中,我们了使用HTML5可以侦听到手机晃动从而实现摇一摇效果.手机摇一摇可以应用到很多场景中,如摇一摇换抽奖,摇一摇搜歌等.本文我将给大家介绍如何使用HTML5+PHP+jQuery实现手 ...

  7. Android开发笔记(四十六)手机相关事件

    手机定位 有一类事件必须依赖于手机信号方能触发,如果把设备中的sim卡拔出,或者该设备本身不支持sim卡(如ipad),那么这类事件将永远不会被触发.在Android中,这类事件包括定位事件和手机信号 ...

  8. iPhone记步和Android计步,手机中运动步数是如何计算的?

    微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间,每个人为了霸占封面疯狂走路.刷步,然而有时我们却发现你跟好 ...

  9. Android手机步数怎么统计的,手机中运动步数是如何计算的?(15个回答)

    微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间,每个人为了霸占封面疯狂走路.刷步,然而有时我们却发现你跟好 ...

最新文章

  1. 关于asp.net mvc中的cookie的对象传递以及加密解密
  2. openstack前世今生
  3. easyui关机图标_如何在Windows 10中创建关机图标
  4. tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐
  5. ubuntu16 安装opencv
  6. c语言函数返回数组_C语言如何用一维数组拷贝函数,拷贝二位数组(C Primer Plus 10-7)...
  7. atomic的安全性?
  8. H3C路由器Hub-Spoke网络结构D×××配置案例(试读连载一二)
  9. 安卓手机运行ios教程_安卓手机充电提示音教程
  10. 即不充值影视Vip,也不去电影院,为何Python爬虫师是这种人?
  11. linux 开根号函数,Linux里隐藏的计算器开根号,问他它的地球未解之谜吗?
  12. Windows快捷键
  13. 重置计算机的网络配置是什么意思,电脑怎么重置网络设置 win10网络重置后连不上网怎么办...
  14. activiti实现任务超时,创建job不执行的原因
  15. 很早以前就想要的东西,没想到今天会“妙手偶得”
  16. FPGA零基础学习:数字通信中的电压标准
  17. 使用antV-G6在angualr中画树形关系图
  18. 跟着hzw学习数列分块
  19. 老男孩脱产班Linux运维51期
  20. android settings$,android settings命令

热门文章

  1. 无人驾驶学习笔记--路径规划(二)【Dubins曲线和Reeds-Shepp曲线】
  2. 哭泣酒店、愤怒俱乐部……情绪释放产业崛起的背后
  3. C常见问题之RAND_MAX到底是多少
  4. 微信小程序报错百度地图API 报错 “APP 服务被禁用“
  5. linux sysrq使用方法,Linux中SysRq的使用[zt]
  6. 【c语言五子棋】自定义类型五子棋/井字棋:胜负判断
  7. 关于voliate关键字
  8. JQuery笔记-通过tag、class、id获取指定的dom
  9. 腾讯笔试、OMG一面、二面、HR面
  10. c语言 迭代法求方程的根,编写用牛顿迭代法求方程根的函数