android 摇一摇功能的实现
将这个功能封装成了一个类,这样今后方便调用
- package com.bobo.myyaoyiyaotest;
- import android.R.bool;
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- public class ShakeListener implements SensorEventListener {
- String TAG = "ShakeListener";
- // 速度阈值,当摇晃速度达到这值后产生作用
- // 两次检测的时间间隔
- private static final int UPTATE_INTERVAL_TIME = 300;
- // 传感器管理器
- private SensorManager sensorManager;
- // 传感器
- private Sensor sensor;
- // 重力感应监听器
- private OnShakeListener onShakeListener;
- // 上下文
- private Context mContext;
- // 手机上一个位置时重力感应坐标
- private float[] lastValues = { 0, 0, 0 };
- private float[] curValues = { 0, 0, 0 };
- // 上次检测时间
- private long lastUpdateTime;
- private long curUpdateTime;
- // 构造器
- 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) {
- sensorManager.registerListener(this, sensor,
- SensorManager.SENSOR_DELAY_GAME);
- }
- }
- // 停止检测
- public void stop() {
- sensorManager.unregisterListener(this);
- }
- // 设置重力感应监听器
- public void setOnShakeListener(OnShakeListener listener) {
- onShakeListener = listener;
- }
- private boolean isShake = false;
- // 重力感应器感应获得变化数据
- public void onSensorChanged(SensorEvent event) {
- // 现在检测时间
- curUpdateTime = System.currentTimeMillis();
- curValues = event.values;
- // 两次检测的时间间隔
- long timeInterval = curUpdateTime - lastUpdateTime;
- // 判断是否达到了检测时间间隔
- if (timeInterval < UPTATE_INTERVAL_TIME)
- return;
- isShake = false;
- lastUpdateTime = curUpdateTime;
- // 现在的时间变成last时间
- if (!isShake && (curValues[0] - lastValues[1] > 20)) {
- isShake = true;
- onShakeListener.onShake();
- }
- lastValues = curValues;
- }
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- // 摇晃监听接口
- public interface OnShakeListener {
- public void onShake();
- }
- }
注意这里面定义了一个OnShakeListener的接口,可以在调用的方法中,实现该接口,利用setOShakeListener方法赋予其即可。
- package com.bobo.myyaoyiyaotest;
- import com.bobo.myyaoyiyaotest.ShakeListener.OnShakeListener;
- import android.os.Bundle;
- import android.os.Vibrator;
- import android.app.Activity;
- import android.view.Menu;
- public class MainActivity extends Activity {
- private Vibrator mVibrator = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Vibrator vibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);
- ShakeListener listener=new ShakeListener(this);
- listener.setOnShakeListener(new OnShakeListener() {
- @Override
- public void onShake() {
- //这里仅仅需要执行摇一摇之后的操作即可。
- mVibrator.vibrate(new long[]{10,1000}, -1);
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }
- 这种耦合,以及回调的思想可谓极好
android 摇一摇功能的实现的更多相关文章
- Android 摇一摇之双甩功能
Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...
- Android仿iPhone晃动撤销输入功能(微信摇一摇功能)
重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内 ...
- android 实现摇一摇功能
实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下: 一.在 AndroidManifest.xml 中添加操作权限 二.实现代码 package com.xs.test; im ...
- Android 摇一摇功能的注意事项
/**开始重力传感器的检测*/ public void start() { // 获得传感器管理器 sensorManager = (SensorManager) mContext.getSystem ...
- Android 使用加速度传感器实现摇一摇功能及优化
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
介绍之前做两个声明: 以下代码可以直接运行,当然你别忘了引用jQuery才行. <script> // DeviceOrientation将底层的方向传感器和运动传感器进行了高级封装, ...
- html5实现微信摇一摇功能
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...
- 用HTML5实现手机摇一摇的功能(转)
在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持.这个特性包括两种事件: 1.devi ...
- Adobe Edge Animate --使用HTML5实现手机摇一摇功能
Adobe Edge Animate --使用HTML5实现手机摇一摇功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. HTML5的发展日新月异,其功能 ...
随机推荐
- Java第五周作业+总结
实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...
- MySql日期加天数,小时,分钟...得到新的时间
在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE(), interval 3 day); 在指定的日期上加三天: SELECT date_add('2014 ...
- adb 连接 mumu 模拟器
[win版]adb connect 127.0.0.1:7555adb shell [mac版] adb kill-server && adb server && ad ...
- P1233木棍加工
这个题被算法标签标为DP,但其实可能只是用dp求子序列,,(n方) 给出l与w,只要是l与w同时满足小于一个l与w,那么这个木棍不需要时间,反之需要1.看到这个题,首先想到了二维背包,然后发现没有最大 ...
- 1、Java语言概述与开发环境——编译和运行第一个程序HelloWorld.java
编写一个Java程序到运行的步骤概述: 1.将Java代码编写到扩展名为.Java的文件中 2.通过Javac命令对该Java文件进行编译 3.通过Java命令对生成的class文件进行运行 一.编写 ...
- 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- go & nssm
参考 用go写windows系统服务
- 在django中使用循环与条件语言
{% if not Article_type_id %} <li class="active"><a href="/">全部</a ...
- bootstrap table实现iview固定列的效果
因为bootstrap自带的固定列效果满足不了公司需求,所以借助fixed-table这个插件完成了iview固定列的效果 <!DOCTYPE html> <html lang=&q ...
- 使用pdfjs插件在线预览PDF文件
前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...