Android加速度传感器实现“摇一摇”,带手机振动
- 由于代码有点多,所以就分开写了,注释还算详细,方便学习
Activitypackage com.lmw.android.test;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Vibrator;import android.view.View;import android.widget.Toast;import com.lmw.android.test.ShakeListener.OnShakeListener;public class ShakeActivity extends Activity {ShakeListener mShakeListener = null;Vibrator mVibrator;@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.shake);// drawerSet ();//设置 drawer监听 切换 按钮的方向//获得振动器服务mVibrator = (Vibrator) getApplication().getSystemService(VIBRATOR_SERVICE);//实例化加速度传感器检测类mShakeListener = new ShakeListener(ShakeActivity.this);mShakeListener.setOnShakeListener(new OnShakeListener() {public void onShake() {mShakeListener.stop();startVibrato(); // 开始 震动new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Toast mtoast;mtoast = Toast.makeText(ShakeActivity.this,"呵呵,成功了!。\n再试一次吧!", 1000);mtoast.show();mVibrator.cancel();mShakeListener.start();}}, 2000);}});}// 定义震动public void startVibrato() {mVibrator.vibrate(new long[] { 500, 200, 500, 200 }, -1);// 第一个{}里面是节奏数组,// 第二个参数是重复次数,-1为不重复,非-1则从pattern的指定下标开始重复}@Overrideprotected void onDestroy() {super.onDestroy();if (mShakeListener != null) {mShakeListener.stop();}}}ShakeListener/*** 一个检测手机摇晃的监听器* 加速度传感器* values[0]: x-axis 方向加速度* values[1]: y-axis 方向加速度* values[2]: z-axis 方向加速度*/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) {//还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,//根据不同应用,需要的反应速率不同,具体根据实际情况设定sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL);}}// 停止检测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;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) {}// 摇晃监听接口public interface OnShakeListener {public void onShake();}}
Android加速度传感器实现“摇一摇”,带手机振动的更多相关文章
- Android加速度传感器
Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q487 ...
- android 加速度传感器 ---摇一摇
package com.eboy.testyaoyiyao;import java.text.SimpleDateFormat;import java.util.Date;import android ...
- Android--保持加速度传感器在屏幕关闭后运行
由于写论文需要,需要用手机加速度采集数据,关于android加速度传感器的介绍网上一抓一大把,但大多都是大同小异,跟官网文档差不多.自己写了个取加速度传感器的APK,发现数据有点不对劲,原理屏幕一关后 ...
- Android--保持加速度传感器在屏幕关闭后运行(收集)
由于写论文需要,需要用手机加速度采集数据,关于android加速度传感器的介绍网上一抓一大把,但大多都是大同小异,跟官网文档差不多.自己写了个取加速度传感器的APK,发现数据有点不对劲,原理屏幕一关后 ...
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...
- Android的加速度传感器模拟摇一摇的效果-android学习之旅(66)
主要介绍一下android的加速传感器的简单用法,模拟摇一摇 ,如果x,y,z三个方向的加速度超过了15,就会弹出Toast,当然你可以设置更复杂的策略,比如判断间隔 代码如下 public clas ...
- Android 使用加速度传感器实现摇一摇功能及优化
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...
- Android 摇一摇 之 传感器片
要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()和onSensorChanged(). 传感器数据的速度值,这 ...
- iOS开发 传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
随机推荐
- 微信公众账号怎么获取微信原始ID
阅读号获取如下,服务号不确定,见图: 进入你的微信公众账号的地址(https://mp.weixin.qq.com ),登录之后进入如下
- 为什么使用long声明和double声明得到的结果不一样呢?
为什么使用long声明和double声明得到的结果不一样呢? 程序如下: public class P376{ public static void main(String[] atgs){ long ...
- AngularJS 基础
1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...
- Linux 终端访问 FTP 及 上传下载 文件
今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...
- soap 路由
下面主要通过项目实例来具体阐述如何实现wse路由和一些项目开发中的细节.本人水平有限,有不对的地方,请朋友们不吝赐教. 在开始项目之前,先了解一下路由的概念,所谓"路由",是指把数 ...
- Unity3d 一些 常见路径
Application.persistentDataPath C:\Users\Administrator\AppData\LocalLow\Company Name\Product Name 如果改 ...
- abs(INT_MAX-(-1))
写一个程序,结果总是不对,check逻辑好几遍也没发现错误,无奈之下debug.发现一个有趣的现象abs(INT_MAX-(-1))返回值是-2147483648.于是看了下abs函数的代码实现. i ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- HTTP 408请求超时错误解决办法
错误描述 对于大多数网站而言,我们所看到的错误消息已经是开发者定制过的页面,比如我们最常见的自定义404错误页面,一般而言,我们看到的408错误应该是类似这样的提示:“408:Request Time ...
- lintcode:Palindrome Partitioning 分割回文串
题目: 分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa&q ...