Android 手机摇晃监听
2016-03-16 14:44
931 查看
转至:http://gundumw100.iteye.com/blog/1472889
http://blog.csdn.net/xfks555/article/details/6703464
Java代码
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) {
}
}
用法:
Java代码
ShakeListener shakeListener = new ShakeListener(this);//创建一个对象
shakeListener.setOnShakeListener(new OnShakeListener(){//调用setOnShakeListener方法进行监听
public void onShake() {
//对手机摇晃后的处理(如换歌曲,换图片,震动……)
//onVibrator();
}
});
//震动
Java代码
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
http://blog.csdn.net/xfks555/article/details/6703464
Java代码
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) {
}
}
用法:
Java代码
ShakeListener shakeListener = new ShakeListener(this);//创建一个对象
shakeListener.setOnShakeListener(new OnShakeListener(){//调用setOnShakeListener方法进行监听
public void onShake() {
//对手机摇晃后的处理(如换歌曲,换图片,震动……)
//onVibrator();
}
});
//震动
Java代码
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
相关文章推荐
- Android中Bitmap,byte[],Drawable,InputStream相互转化工具类
- 小米3Android开发学习笔记二
- Android在xml布局中找不到自定义属性的问题
- Android 应用程序获得版本号
- AndroidStudio修改单行注释灰不拉基的颜色
- Android使用gradle快速生成渠道apk包。
- Android应用打包安装过程具体解释
- Android 属性动画特效
- 【转】Android Support 包里究竟有什么
- Android Support v4,v7,v13的区别和应用场景
- Android ScrollView向上滑动控件顶部悬浮效果实现
- 利用 Android Studio 和 Gradle 打包多版本APK
- android camera(一):camera模组CMM介绍
- Android开发笔记(八十一)屏幕规格适配
- Android Fragment完全解析,关于碎片你所需知道的一切
- android camera(一):camera模组CMM介绍
- Android 缩放图片
- 我的Android之路
- Android监听程序进入后台,或者恢复到前台
- android自定义一圆角ImageView