225_手机摇晃监听器ShakeListener
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相关推荐
- Unity 手机摇晃检测
很多手机游戏都会用到对手机摇晃的检测,废话不多说直接上代码. 目前测试力度设为2比较合适. using UnityEngine; using UnityEngine.Events;public cla ...
- Android——手机彩票摇晃选号(双色球) 实现原理
实现思路:因为手机传感器每隔一段时间会发送采集到的数据包, 首先获取第一个数据包所在的三个轴的加速度值,记录, 当过一段时间之后再次获取三个轴的加速度值,计算增量,将相邻两个点的增量进行汇总,当达到预 ...
- Android加速度传感器实现“摇一摇”,带手机振动
由于代码有点多,所以就分开写了,注释还算详细,方便学习 Activity package com.lmw.android.test; import android.app.Activity; impo ...
- 手机摇一摇功能音量大小跟系统音量一致
源代码免费下载 布局文文件:main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- Android手机摇一摇功能的简单实现
我需要做一个Android摇一摇的功能,网上我看了很多教程,都写的大同小异,很多了,最近慕课网上也有关于开发摇一摇教程的视屏,讲的很详细,可惜中间视屏少了两节! SensorManager :获取传感 ...
- HTML5+PHP+jQuery手机摇一摇换衣
在上一篇文章中,我们了使用HTML5可以侦听到手机晃动从而实现摇一摇效果.手机摇一摇可以应用到很多场景中,如摇一摇换抽奖,摇一摇搜歌等.本文我将给大家介绍如何使用HTML5+PHP+jQuery实现手 ...
- Android开发笔记(四十六)手机相关事件
手机定位 有一类事件必须依赖于手机信号方能触发,如果把设备中的sim卡拔出,或者该设备本身不支持sim卡(如ipad),那么这类事件将永远不会被触发.在Android中,这类事件包括定位事件和手机信号 ...
- iPhone记步和Android计步,手机中运动步数是如何计算的?
微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间,每个人为了霸占封面疯狂走路.刷步,然而有时我们却发现你跟好 ...
- Android手机步数怎么统计的,手机中运动步数是如何计算的?(15个回答)
微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间,每个人为了霸占封面疯狂走路.刷步,然而有时我们却发现你跟好 ...
最新文章
- 关于asp.net mvc中的cookie的对象传递以及加密解密
- openstack前世今生
- easyui关机图标_如何在Windows 10中创建关机图标
- tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐
- ubuntu16 安装opencv
- c语言函数返回数组_C语言如何用一维数组拷贝函数,拷贝二位数组(C Primer Plus 10-7)...
- atomic的安全性?
- H3C路由器Hub-Spoke网络结构D×××配置案例(试读连载一二)
- 安卓手机运行ios教程_安卓手机充电提示音教程
- 即不充值影视Vip,也不去电影院,为何Python爬虫师是这种人?
- linux 开根号函数,Linux里隐藏的计算器开根号,问他它的地球未解之谜吗?
- Windows快捷键
- 重置计算机的网络配置是什么意思,电脑怎么重置网络设置 win10网络重置后连不上网怎么办...
- activiti实现任务超时,创建job不执行的原因
- 很早以前就想要的东西,没想到今天会“妙手偶得”
- FPGA零基础学习:数字通信中的电压标准
- 使用antV-G6在angualr中画树形关系图
- 跟着hzw学习数列分块
- 老男孩脱产班Linux运维51期
- android settings$,android settings命令
热门文章
- 无人驾驶学习笔记--路径规划(二)【Dubins曲线和Reeds-Shepp曲线】
- 哭泣酒店、愤怒俱乐部……情绪释放产业崛起的背后
- C常见问题之RAND_MAX到底是多少
- 微信小程序报错百度地图API 报错 “APP 服务被禁用“
- linux sysrq使用方法,Linux中SysRq的使用[zt]
- 【c语言五子棋】自定义类型五子棋/井字棋:胜负判断
- 关于voliate关键字
- JQuery笔记-通过tag、class、id获取指定的dom
- 腾讯笔试、OMG一面、二面、HR面
- c语言 迭代法求方程的根,编写用牛顿迭代法求方程根的函数