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();}}
转载于:https://www.cnblogs.com/xgjblog/p/4067306.html
Android加速度传感器实现“摇一摇”,带手机振动相关推荐
- Android加速度传感器
Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q487 ...
- Android 加速度传感器(G-Sensor)
Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER 通过 android.hardware.SensorEvent 返回加速度传感器值. 加速度传感器返回值的单 ...
- 【转】Android 加速度传感器 (G-Sensor)
http://blog.csdn.net/stevenliyong/archive/2009/09/13/4547568.aspx Android 加速度传感器 (G-Sensor) 收藏 Andro ...
- Android移动开发-利用加速度传感器开发仿微信摇一摇功能的实现
加速度传感器是最常见的传感器,大部分Android手机都内置了加速度传感器,加速度传感器运用最广泛的功能就是微信的摇一摇功能,用户通过摇晃手机寻找周围的人,其它类似的应用还摇骰子.玩游戏等. 下面以摇 ...
- Android加速度传感器原理
这里我们将通过一个"摇一摇"应用来说明如何使用加速度传感器.但在开发之前,我们先对加速度传感器进行一些简单的介绍. 加速的是描述物体运动速度变化快慢的物理量,以m/s2为单位.在静 ...
- android加速度传感器转为线性速度,如何在android的驱动程序中对加速度传感器的数据进行方向和坐标的转...
一部智能手机或便携设备应具有Wi-Fi 和互联网功能,能够运行应用软件等诸多特征,而且一定会具有内置传感器.高端智能手机可能集成接近传感器,环境光传感器,3 轴加速度计,以及磁力计等多种传感器. An ...
- 高通 android 传感器支持,Android加速度传感器数值的过滤
加速度传感器测量设备的加速度,包括重力加速度.以下代码展示了如何获取缺省的加速度传感器的一个实例: private SensorManager mSensorManager; private Sens ...
- Android加速度传感器 -- 抬手亮屏
android系统提供以下传感器供应用层使用,具体如下: // android.hardware.Sensor TYPE_ACCELEROMETER 1 // 加速度传感器 TYPE_MAGNETIC ...
- android 加速度传感器测步数,基于加速度传感器的运动步数检测算法研究
基于加速度传感器的运动步数检测算法研究 为解决人体运动过程中手腕摆动对步数检测干扰的影响,提出了一种区域峰值步数检测算法.该算法根据人体运动时的加速度信号特征,使用高斯滤波去除噪声对加速度信号的影响, ...
最新文章
- HDU2021 发工资咯
- 白话解析:一致性哈希算法 consistent hashing
- 产品经理的四大境界与核心能力
- linux profile of env
- mysql 高可用工具_MySQL Utilities 高可用工具体验
- 服务器用户编码是什么,涨知识:英特尔服务器CPU编号是啥意思?
- 有向图的广度优先遍历_图的两种遍历方式
- r语言descstats_一条命令轻松绘制CNS顶级配图-ggpubr
- Multi-thread--C++11中std::lock_guard的使用
- java在循环中删除数组元素,在循环Perl中删除数组中的元素
- Python机器学习工具箱
- 采用dlopen、dlsym、dlclose加载动态链接库【转】
- 拓端tecdat|R语言中的马尔可夫区制转移(Markov regime switching)模型
- php foreach 不等于_PHP性能优化小技巧
- 2021兴业数金Java笔试题面经
- 计算机声卡原理,来谈谈声卡的工作原理吧
- 怎么看(美女)漫画最爽 - 图流
- FINAUNCE金融业增速反弹信贷投放创新高叠加股市回暖
- java数组计算奇数的和,JAVA从键盘中输入20个整数将奇数和偶数存入不同的两个数组中 计算这两个数组中所有数据之和...
- Java实现 LeetCode 55 跳跃游戏
热门文章
- ios中通过ALAssetsLibrary获取所有图片
- 如何使用PHP编写daemon process
- Ubuntu/Fedora高版本安装海思SDK的方法
- linux c编程操作数据库(sqlite3应用)
- Android 5.x系统nfs挂载系统启动记录 nfs挂载文件记录
- 9.27-uname,useradd命令
- linux ntp同步日志,Linux使用入门教程之Rsyslog日志管理、NTP和Rsync备份同步
- php mysqldb 数据库切换,Python MySQLdb模块连接操作mysql数据库实例
- mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...
- 入选2021全球青年领袖榜单,蚂蚁何征宇的技术人生