`

监听手机晃动(摇一摇)SensorEventListener

阅读更多
http://blog.csdn.net/xfks555/article/details/6703464

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
分享到:
评论

相关推荐

    模拟微信“摇一摇”功能

    首先,"摇一摇"功能的核心在于手机内置的传感器,尤其是加速度传感器(Accelerometer)。Android设备上的加速度传感器可以实时监测设备在三个轴向(X、Y、Z)上的加速度变化,这是判断用户是否进行了摇动操作的基础...

    安卓摇一摇传感器相关-手机摇一摇功能音量可根据系统音量加减键调节.zip

    在安卓平台上,实现“摇一摇”功能是通过利用设备内置的传感器来检测用户的晃动动作,进而触发相应的应用程序事件。这个压缩包“安卓摇一摇传感器相关-手机摇一摇功能音量可根据系统音量加减键调节.zip”似乎包含了...

    仿微信的摇一摇

    微信的“摇一摇”是一项独特且受欢迎的功能,它让用户通过晃动手机来触发特定的交互。这个功能的核心在于它能够检测到用户的摇动动作并将其转化为可识别的事件。在本文中,我们将深入探讨如何实现这样一个仿微信的...

    手机摇一摇统计摇的次数

    在移动应用开发中,"手机摇一摇"功能是一种常见的用户交互方式,它允许用户通过晃动手机来触发特定的事件或操作。本知识点将详细解释如何实现"手机摇一摇"来统计摇动的次数,并探讨相关技术及其实现过程。 首先,...

    手机摇一摇震动刷新

    在Android开发中,“手机摇一摇震动刷新”是一种常见的用户交互功能,允许用户通过晃动手机来触发某个操作,如刷新界面。这个功能通常应用于新闻应用、社交应用或者任何需要实时更新内容的场景。下面我们将深入探讨...

    【流量云项目】摇一摇功能的实现

    1. **传感器(Sensor)**:摇一摇功能依赖于手机内置的陀螺仪(Gyroscope)和加速度计(Accelerometer)。这两个传感器可以检测设备在三维空间中的运动状态和速度变化,为摇一摇的识别提供数据支持。 2. **传感器...

    摇一摇代码

    “摇一摇”功能通常用于手机应用程序中,允许用户通过晃动手机来触发特定的操作或效果。这种交互方式简单直观,能够提升用户体验。例如,在微信中,用户可以通过摇动手机来参与抽奖、添加好友等互动活动。 ### 技术...

    摇一摇 源码

    在安卓平台上,"摇一摇"功能是一种常见的用户交互方式,它允许用户通过晃动设备来触发特定的应用程序事件或功能。"摇一摇 源码"的资源旨在提供一个实际的示例,帮助开发者深入理解如何在自己的安卓应用中实现这一...

    Android开发实现摇一摇的功能Java源码打包下载

    - 为了性能考虑,可以在不需使用摇一摇功能时及时停止监听,如切换到其他页面或应用进入后台。 - 在处理摇动事件时,注意处理并发问题,避免多个线程同时响应同一事件。 通过这个Java源码包,开发者可以快速集成...

    手机摇一摇DEMO代码,实现摇一摇执行特定程序.rar

    在移动应用开发中,"手机摇一摇"功能是一个相当有趣的交互方式,它允许用户通过晃动设备来触发特定的程序或操作。本资源提供的"手机摇一摇DEMO代码,实现摇一摇执行特定程序.rar"是一个示例项目,旨在帮助开发者了解...

    传感器demo(摇一摇)

    "摇一摇"功能是许多智能手机应用中的常见交互方式,用户通过快速晃动设备来触发特定的操作,如刷新内容、切换页面或者玩游戏时的特殊动作。实现这一功能通常需要以下几个步骤: 1. **注册传感器服务**:首先,你...

    Android-Beetle实现通过摇一摇手机就能够轻松地在GitHubGitLab和AzureDevOps上创建Bug报告

    标题中的“Android-Beetle实现通过摇一摇手机就能够轻松地在GitHubGitLab和AzureDevOps上创建Bug报告”揭示了一个独特的Android应用程序——Beetle。这个应用旨在简化开发者和用户向GitHub、GitLab以及Azure DevOps...

    Android摇一摇demo

    在Android平台上,"摇一摇"功能是一种常见的用户交互方式,尤其在移动应用中,它能让用户通过简单地晃动设备来触发特定的操作。在这个"Android摇一摇demo"中,我们将探讨如何利用Android的传感器API来实现这一功能,...

    仿微信 摇一摇

    在安卓平台上,微信的“摇一摇”功能是一款极具特色的互动设计,用户只需轻轻一摇手机,就能触发特定的功能或活动。这个功能的实现涉及到多个技术层面,包括传感器的使用、事件监听、动画效果以及后台服务等。下面将...

    微信摇一摇实现

    微信摇一摇功能是微信应用程序中的一个特色互动功能,它让用户通过晃动手机来触发特定的事件或活动。这个功能在各种应用场景中被广泛使用,比如音乐分享、电视互动、抽奖游戏等。下面我们将深入探讨如何实现这样一个...

    摇一摇demo

    "摇一摇"功能在移动应用开发中是一个常见的交互方式,尤其在社交和游戏类应用中,用户通过晃动设备来触发特定的操作或活动。在这个名为"摇一摇demo"的示例中,我们将深入探讨如何实现这样一个功能,并了解其背后的...

    摇一摇换肤

    "摇一摇换肤"是一种基于移动设备的交互式功能,它允许用户通过摇动手机来切换应用的皮肤或主题。这一功能的核心是利用设备内置的传感器,特别是加速度计,来检测用户的摇动动作。下面我们将深入探讨实现这一功能所...

    [Android实例] 仿微信摇一摇功能实现

    在Android开发中,微信的“摇一摇”功能是一个非常有趣的交互设计,它允许用户通过晃动手机来触发特定的事件或活动。本实例将详细讲解如何在Android应用中实现类似的功能。 首先,我们需要理解“摇一摇”功能的核心...

    Android摇一摇

    在这个监听器中,我们将处理摇一摇的逻辑: ```java sensorManager.registerListener(sensorListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); ``` 这里,`sensorListener`是实现了`...

    手机摇一摇功能+音量可根据系统音量加减键调节

    在安卓平台上,手机的“摇一摇”功能是一种有趣且实用的交互方式,它通过设备内置的重力感应器来检测用户的晃动动作,并根据预设的逻辑执行相应的操作。结合音量调节,用户可以通过摇动手机来改变系统的音量大小,这...

Global site tag (gtag.js) - Google Analytics