- 由于代码有点多,所以就分开写了,注释还算详细,方便学习
Activity
package 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;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.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() {
@Override
public 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的指定下标开始重复
}
@Override
protected 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加速度传感器实现“摇一摇”,带手机振动
时间: 2024-10-03 13:45:54
Android加速度传感器实现“摇一摇”,带手机振动的相关文章
Android加速度传感器的使用:摇一摇功能的实现
一.原理介绍: Android手机中摇一摇的功能已经很常见了,最近接触到了这个功能,原理很简单:使用加速度传感器,在晃动手机时,监听加速度在各个方向的变化,当加速度值超过设定的灵敏度时,则触发摇一摇功能. 二.使用到的类: SensorManager SensorEventListener 三.功能实现: 1.摇一摇功能:我将摇一摇功能封装成了一个类ShakeUtils,在使用时按照注释中的说明使用即可,ShakeUtils.java如下(差的包请CTRL+SHIFT+O导入): /** * 摇
Android加速度传感器
Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9065313 步骤 传感器使用步骤之前已经介绍过,地址:http://blog.csdn.net/q4878802/article/details/48112477 代码 package com.example.kongqw.kqwsensorforaccelerometerdemo;
android 加速度传感器妙用与自定义View
本节的实例是一个倾斜角度测量应用,它可以准确的测量出你手机与水平面的倾斜角度,使用的是android传感器里面的加速传感器.巧妙的运用了加速度传感器各个值所代表的物理意义,加上一个很简单的算法,就能测出倾斜角度. 角度值会随着手机的倾斜而准确显示,效果如图: 废话不多说直接上代码,上面有清楚的说明 package sina.CreAmazing.angle_view; import android.app.Activity; import android.content.Context; imp
android 加速度传感器 ---摇一摇
package com.eboy.testyaoyiyao; import java.text.SimpleDateFormat;import java.util.Date; import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware
Android实现摇一摇功能
做过一个小项目,其中实现了摇一摇功能和刮一刮功能还有播放背景音乐等 摇一摇功能主要用到加速度传感器:Sensor.TYPE_ACCELEROMETER 摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件. /** * FileName: MainActivity.java * @desc 该类是用于显示摇一摇界面 * @author HTP * @Date 20140311 * @version 1.00 */ public class MainActivity extends
三轴加速度传感器原理及应用
三轴加速度传感器原理 目前的加速度传感器有多种实现方式,主要可分为压电式.电容式及热感应式三种,这三种技术各有其优缺点.以电容式3轴加速度计的技术原理为例.电容式加速度计能够感测不同方向的加速度或振动等运动状况.其主要为利用硅的机械性质设计出的可移动机构:由于加速度使得机械悬臂与两个电极之间的距离发生变化,从而改变了两个电容的参数.通过集成的开关电容放大电路量测电容参数的变化,形成了与加速度成正比的电压输出.因此3轴加速度传感器必然包含一个单纯的机械性MEMS传感器和一枚ASIC接口芯片两部分,
玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇动手机的时候这里的动画效果基本和微信上的动画效果一致,这里请大家自行脑补微信摇一摇画面. 那我们就动手吧. 1.布局文件 好,那我们先来看看布局文件吧,在布局文件的正中央是一个花的图片,上图大家看到的手机图片实际上是两张图片拼接在一起,将花的那张图片遮住了,当摇一摇的时候,这两张图片分别向上或者向下
Android 使用加速度传感器实现摇一摇功能及优化
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得传感器管理器的实例 sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 2.通过传感器管理器获得加速传感器 accelerateSensor = getSensorManager(cont
Android的加速度传感器模拟摇一摇的效果-android学习之旅(66)
主要介绍一下android的加速传感器的简单用法,模拟摇一摇 ,如果x,y,z三个方向的加速度超过了15,就会弹出Toast,当然你可以设置更复杂的策略,比如判断间隔 代码如下 public class MainActivity extends Activity { private SensorManager sensorManager; private TextView textView; @Override protected void onCreate(Bundle savedInstan