监听手机晃动(摇一摇)SensorEventListener
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- /**
- *
- * 一个检测手机摇晃的监听器
- * @author fuzhengchao
- *
- */
- public class ShakeListener implements SensorEventListener {
- //速度阈值,当摇晃速度达到这值后产生作用
- private static final int SPEED_SHRESHOLD = 4000;
- //两次检测的时间间隔
- private static final int UPTATE_INTERVAL_TIME = 70;
- //传感器管理器
- 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) {
- }
- }
用法:
- ShakeListener shakeListener = new ShakeListener(this);//创建一个对象
- shakeListener.setOnShakeListener(new OnShakeListener(){//调用setOnShakeListener方法进行监听
- public void onShake() {
- //对手机摇晃后的处理(如换歌曲,换图片,震动……)
- //onVibrator();
- }
- });
//震动
- private void onVibrator() {
- Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
- if (vibrator == null) {
- Vibrator localVibrator = (Vibrator) context.getApplicationContext()
- .getSystemService("vibrator");
- vibrator = localVibrator;
- }
- vibrator.vibrate(100L);
- }
摇一摇精简代码实现
http://blog.sina.com.cn/s/blog_66cfbaa5010120w8.html
Android中类似于奇虎360手机卫士中摇一摇效果实现
http://blog.csdn.net/nono_love_lilith/article/details/7554341
监听手机晃动(摇一摇)SensorEventListener的更多相关文章
- 用BroadcastReceiver监听手机网络状态变化
android--解决方案--用BroadcastReceiver监听手机网络状态变化 标签: android网络状态监听方案 2015-01-20 15:23 1294人阅读 评论(3) 收藏 举报 ...
- Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...
- Android初级教程使用服务注册广播接收者监听手机解锁屏变化
之前第七章广播与服务理论篇写到: 特殊的广播接收者(一般发广播次数频率很高) 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的 屏幕锁屏和解锁 电量改变 今天在这里就回顾一下,且用代码方 ...
- iOS 关于监听手机截图,UIView生成UIImage, UIImage裁剪与压缩的总结
一. 关于监听手机截图 1. 背景: 发现商品的售价页总是被人转发截图,为了方便用户添加截图分享的小功能 首先要注册用户截屏操作的通知 - (void)viewDidLoad { [super vi ...
- vue 监听手机键盘是否弹出及input是否聚焦成功
//定义移动端类型 function pageStats() { let u = navigator.userAgent, app = navigator.appVersion; let obj = ...
- 知识点---js监听手机返回键,回到指定界面
方法一. $(function(){ pushHistory(); window.addEventListener(“popstate”, function(e) { window.location ...
- 使用ionic开发时用遇到监听手机返回按钮的问题~
当时用的是ionic开发一个app,需求是,当按下手机的返回按钮,在指定的页面双击退出,而在其他页面点击一次返回到上个页面: 其实用ionic自带的服务就可以解决: //双击退出 $ionicP ...
- JavaScript监听手机物理返回键的两种解决方法
JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...
- 监听 手机back键和顶部的回退
// 回退事件,监听 手机back键和顶部的回退 pushHistory(); window.addEventListener("popstate", function(e) { ...
随机推荐
- OpenStack里对VPN的支持
今天翻自己的笔记找到了点去年研究Cloudpipe的东西: 对于用VLAN隔开的项目内主机的访问,可以使用CloudPipe来进行VPN访问 其实就是把OpenStack和OpenVPN集成了一下,给 ...
- TCP/IP之坚持定时器、报活定时器
TCP中的四个定时器: 1.超时定时器(最复杂的一个) 2.坚持定时器 3.保活定时器 4.2MSL定时器 坚持定时器用于防止通告窗口为0以后c/s双方相互等待死锁的情况:而保活定时器则用于处理半开发 ...
- java类和对象的基础(笔记)
在Java类的设计中,有时希望一个类在任何时候只能有一个实例.这时可以将该类设计为单例模式(singleton).要将一个类设计为单例模式,需要把类的构造方法的访问修饰符声明为private,然后在类 ...
- 利用phpmailer类邮件发送
<?php require("class.phpmailer.php"); //下载的文件必须放在该文件所在目录 $mail = new PHPMailer(); //建立邮 ...
- PHP学习笔记1-常量,函数
常量:使用const(php5)声明,只能被赋值一次,php5以下版本使用define: <?php const THE_VALUE = 100;//PHP5中才有const echo THE_ ...
- 浙江工商大学15年校赛E题 无邪的飞行棋 【经典背包】
无邪的飞行棋 Time Limit 1s Memory Limit 64KB Judge Program Standard Ratio(Solve/Submit) 15.38%(4/26) Descr ...
- WEB开发:如何用js来模拟服务器的ajax响应,不依赖服务器来编写前端代码
一.问题的提出 目前web前端开发,主流的思路是: 1)编写静态的html文件(不使用模板技术,与服务器无关) 2)页面通过ajax与服务器交互,进行数据的传输,数据格式为json格式 这里存在一个问 ...
- Python 2.7 学习笔记 字典(map)的使用
python中的字典,就是通常说的map,即 key/value集合的数据结构. 本文来介绍下在python下如何使用字典. 对于map这种数据结构能干什么,我们就不说了,这是一个常见的数据结构,我们 ...
- Oracle 专用模式(DEDICATED) 和 共享模式(SHARE) (转)
Oracle 是一门博大精深的技术.玩了2年的oracle,依旧还有很多知识点不清楚. 昨天群里的朋友提到了 DEDICATED 和 SHARE 两种模式. 不清楚,默默的做点功课了.从网上搜了点知识 ...
- 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户、五星级厨师、住房补助 - V2EX
年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户.五星级厨师.住房补助 - V2EX 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福 ...