将这个功能封装成了一个类,这样今后方便调用

  1. package com.bobo.myyaoyiyaotest;
  2.  
  3. import android.R.bool;
  4. import android.content.Context;
  5. import android.hardware.Sensor;
  6. import android.hardware.SensorEvent;
  7. import android.hardware.SensorEventListener;
  8. import android.hardware.SensorManager;
  9.  
  10. public class ShakeListener implements SensorEventListener {
  11. String TAG = "ShakeListener";
  12. // 速度阈值,当摇晃速度达到这值后产生作用
  13. // 两次检测的时间间隔
  14. private static final int UPTATE_INTERVAL_TIME = 300;
  15. // 传感器管理器
  16. private SensorManager sensorManager;
  17. // 传感器
  18. private Sensor sensor;
  19. // 重力感应监听器
  20. private OnShakeListener onShakeListener;
  21. // 上下文
  22. private Context mContext;
  23. // 手机上一个位置时重力感应坐标
  24. private float[] lastValues = { 0, 0, 0 };
  25. private float[] curValues = { 0, 0, 0 };
  26.  
  27. // 上次检测时间
  28. private long lastUpdateTime;
  29. private long curUpdateTime;
  30.  
  31. // 构造器
  32. public ShakeListener(Context c) {
  33. // 获得监听对象
  34. mContext = c;
  35. start();
  36. }
  37.  
  38. // 开始
  39. public void start() {
  40. // 获得传感器管理器
  41. sensorManager = (SensorManager) mContext
  42. .getSystemService(Context.SENSOR_SERVICE);
  43. if (sensorManager != null) {
  44. // 获得重力传感器
  45. sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  46. }
  47. // 注册
  48. if (sensor != null) {
  49. sensorManager.registerListener(this, sensor,
  50. SensorManager.SENSOR_DELAY_GAME);
  51. }
  52. }
  53.  
  54. // 停止检测
  55. public void stop() {
  56. sensorManager.unregisterListener(this);
  57. }
  58.  
  59. // 设置重力感应监听器
  60. public void setOnShakeListener(OnShakeListener listener) {
  61. onShakeListener = listener;
  62. }
  63.  
  64. private boolean isShake = false;
  65.  
  66. // 重力感应器感应获得变化数据
  67. public void onSensorChanged(SensorEvent event) {
  68. // 现在检测时间
  69. curUpdateTime = System.currentTimeMillis();
  70. curValues = event.values;
  71. // 两次检测的时间间隔
  72. long timeInterval = curUpdateTime - lastUpdateTime;
  73. // 判断是否达到了检测时间间隔
  74. if (timeInterval < UPTATE_INTERVAL_TIME)
  75. return;
  76. isShake = false;
  77. lastUpdateTime = curUpdateTime;
  78. // 现在的时间变成last时间
  79. if (!isShake && (curValues[0] - lastValues[1] > 20)) {
  80. isShake = true;
  81. onShakeListener.onShake();
  82. }
  83. lastValues = curValues;
  84. }
  85.  
  86. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  87. }
  88.  
  89. // 摇晃监听接口
  90. public interface OnShakeListener {
  91. public void onShake();
  92. }
  93. }

注意这里面定义了一个OnShakeListener的接口,可以在调用的方法中,实现该接口,利用setOShakeListener方法赋予其即可。

  1. package com.bobo.myyaoyiyaotest;
  2.  
  3. import com.bobo.myyaoyiyaotest.ShakeListener.OnShakeListener;
  4.  
  5. import android.os.Bundle;
  6. import android.os.Vibrator;
  7. import android.app.Activity;
  8. import android.view.Menu;
  9.  
  10. public class MainActivity extends Activity {
  11. private Vibrator mVibrator = null;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. Vibrator vibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);
  17. ShakeListener listener=new ShakeListener(this);
  18. listener.setOnShakeListener(new OnShakeListener() {
  19.  
  20. @Override
  21. public void onShake() {
  22. //这里仅仅需要执行摇一摇之后的操作即可。
  23. mVibrator.vibrate(new long[]{10,1000}, -1);
  24. }
  25. });
  26.  
  27. }
  28.  
  29. @Override
  30. public boolean onCreateOptionsMenu(Menu menu) {
  31. // Inflate the menu; this adds items to the action bar if it is present.
  32. getMenuInflater().inflate(R.menu.activity_main, menu);
  33. return true;
  34. }
  35.  
  36. }
  37.  
  38. 这种耦合,以及回调的思想可谓极好

android 摇一摇功能的实现的更多相关文章

  1. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

  2. Android仿iPhone晃动撤销输入功能(微信摇一摇功能)

    重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内 ...

  3. android 实现摇一摇功能

    实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下: 一.在 AndroidManifest.xml 中添加操作权限 二.实现代码 package com.xs.test; im ...

  4. Android 摇一摇功能的注意事项

    /**开始重力传感器的检测*/ public void start() { // 获得传感器管理器 sensorManager = (SensorManager) mContext.getSystem ...

  5. Android 使用加速度传感器实现摇一摇功能及优化

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...

  6. 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能

      介绍之前做两个声明: 以下代码可以直接运行,当然你别忘了引用jQuery才行. <script> // DeviceOrientation将底层的方向传感器和运动传感器进行了高级封装, ...

  7. html5实现微信摇一摇功能

    在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...

  8. 用HTML5实现手机摇一摇的功能(转)

    在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持.这个特性包括两种事件: 1.devi ...

  9. Adobe Edge Animate --使用HTML5实现手机摇一摇功能

    Adobe Edge Animate --使用HTML5实现手机摇一摇功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. HTML5的发展日新月异,其功能 ...

随机推荐

  1. Java第五周作业+总结

    实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...

  2. MySql日期加天数,小时,分钟...得到新的时间

    在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE(), interval 3 day); 在指定的日期上加三天: SELECT date_add('2014 ...

  3. adb 连接 mumu 模拟器

    [win版]adb connect 127.0.0.1:7555adb shell [mac版] adb kill-server && adb server && ad ...

  4. P1233木棍加工

    这个题被算法标签标为DP,但其实可能只是用dp求子序列,,(n方) 给出l与w,只要是l与w同时满足小于一个l与w,那么这个木棍不需要时间,反之需要1.看到这个题,首先想到了二维背包,然后发现没有最大 ...

  5. 1、Java语言概述与开发环境——编译和运行第一个程序HelloWorld.java

    编写一个Java程序到运行的步骤概述: 1.将Java代码编写到扩展名为.Java的文件中 2.通过Javac命令对该Java文件进行编译 3.通过Java命令对生成的class文件进行运行 一.编写 ...

  6. 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  7. go & nssm

    参考 用go写windows系统服务

  8. 在django中使用循环与条件语言

    {% if not Article_type_id %} <li class="active"><a href="/">全部</a ...

  9. bootstrap table实现iview固定列的效果

    因为bootstrap自带的固定列效果满足不了公司需求,所以借助fixed-table这个插件完成了iview固定列的效果 <!DOCTYPE html> <html lang=&q ...

  10. 使用pdfjs插件在线预览PDF文件

    前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...