Android-利用重力感应摇晃 android重力感应代码
------------------------------------------------------------------------------------------
package com.pocketdigi;
import com.pocketdigi.ShakeListener.OnShakeListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SensorTestActivity extends Activity {
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShakeListener shakeListener = newShakeListener(this); // 创建一个对象
shakeListener.setOnShakeListener(newOnShakeListener() { // 调用setOnShakeListener方法进行监听
public void onShake() {
// 对手机摇晃后的处理(如换歌曲,换图片……)
Log.e("", "onShake");
}
});
}
}
----------------------------------------------------------------------
package com.pocketdigi;
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 {
//速度阈值,当摇晃速度达到这值后产生作用
privatestatic final int SPEED_SHRESHOLD = 4000;
//两次检测的时间间隔
privatestatic final int UPTATE_INTERVAL_TIME = 70;
//传感器管理器
privateSensorManager sensorManager;
// 传感器
privateSensor sensor;
//重力感应监听器
privateOnShakeListener onShakeListener;
// 上下文
privateContext context;
//手机上一个位置时重力感应坐标
privatefloat lastX;
privatefloat lastY;
privatefloat lastZ;
//上次检测时间
private longlastUpdateTime;
// 构造器
publicShakeListener(Context c) {
//获得监听对象
context =c;
start();
}
// 开始
public voidstart() {
//获得传感器管理器
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 voidstop() {
sensorManager.unregisterListener(this);
}
//摇晃监听接口
publicinterface OnShakeListener {
public voidonShake();
}
//设置重力感应监听器
public voidsetOnShakeListener(OnShakeListener listener) {
onShakeListener = listener;
}
//重力感应器感应获得变化数据
public voidonSensorChanged(SensorEvent event) {
//现在检测时间
longcurrentUpdateTime = System.currentTimeMillis();
//两次检测的时间间隔
longtimeInterval = 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 voidonAccuracyChanged(Sensor sensor, int accuracy) {
}
}
更多阅读
诺顿Android手机安全软件2.0使用评测 诺顿安全特警
诺顿手机安全软件(Norton-Mobile Security)主要针对Android(安卓)手机设计的一款保护手机本身及其信息安全,具有防病毒功能的软件。它不仅具有防护恶意软件的功能,还能够进行设备远程锁定和数据擦除,确保手机丢失后能够及时定位手机所
初次使用高频感应加热机的认识及使用方法 高频感应加热电源
初次使用高频感应加热机的认识及使用方法——简介初次使用高频感应加热机的认识及使用方法:初次使用高频感应加热机的认识及使用方法——方法/步骤初次使用高频感应加热机的认识及使用方法 1、先了解主要规格参数初次使用高频感应
Android布局控件之AbsoluteLayout详解 android五大布局详解
Android布局控件之AbsoluteLayout详解——简介Android布局控件之AbsoluteLayout详解AbsoluteLayout是绝对布局管理器,指的是指定组件的左上角绝对坐
怎样在Android手机配置Exchange邮箱 mac 配置exchange邮箱
怎样在Android手机配置Exchange邮箱——简介Android手机应用已经非常普遍,而Exchange邮箱在手机里应用还是比较少,往往需要自己配置才能正常使用,现在为大家分享如何在Android手机上配置Exchange邮箱怎样在Android手机配置Exchange邮
android开发工程师的工资待遇如何 测试开发工程师待遇
?行业薪酬的影响因素包括行业内、外部因素及员工个人的因素,同样,在IT行业中,要想了解android开发工程师的薪资待遇情况如何,我们也可以从这几个因素入手,加以了解。首先,企业自身的状况如何直接影响到员工的工资水平如何。企业负担能力