package com.tao.tools.shack;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;public class ShackListener implements SensorEventListener {public static final int SPEED_SHRESHOLD = 3000;// 摇晃起作用的临界值public static final int UPTATE_INTERVAL_TIME = 100;// 两次检测的时间间隔private SensorManager sensorManager;// 传感器管理器private Sensor sensor;// 传感器private OnShackListener onShackListener;// 重力感应监听器private Context context;// 手机上某一点向3个坐标的坐标private float lastX;private float lastY;private float lastZ;private long lastUpdateTime;// 上次更新时间public ShackListener(Context context) {this.context = context;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 void setOnShackListener(OnShackListener shackListener) {this.onShackListener = shackListener;}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}@Overridepublic void onSensorChanged(SensorEvent event) {long currentUpdateTime = System.currentTimeMillis();// 当前时间long timeInterval = currentUpdateTime - lastUpdateTime;// 两次检测时间间隔if (timeInterval < this.UPTATE_INTERVAL_TIME) {return;}lastUpdateTime = currentUpdateTime;// 获得3个方向的坐标float x = event.values[0];float y = event.values[1];float z = event.values[2];// 3个方向的变化量float deltaX = x - lastX;float deltaY = y - lastY;float deltaZ = z - lastZ;lastX = x;lastY = y;lastZ = z;double speed = Math.sqrt(lastX * lastX + lastY * lastY + lastZ * lastZ)/ timeInterval * 10000;if (speed >= this.SPEED_SHRESHOLD) {onShackListener.onShack();}}public interface OnShackListener {public void onShack();}}


package com.tao.tools.shack;import com.tao.tools.R;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.widget.TextView;import android.widget.Toast;public class ShackActivity extends Activity {private ShackListener mShackListener = null;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示程序的标题栏 setContentView(R.layout.activity_shackactivity);mShackListener = new ShackListener(this);setListener();textView = (TextView)findViewById(R.id.text);}private void setListener(){mShackListener.setOnShackListener(new ShackListener.OnShackListener() {@Overridepublic void onShack() {//Toast.makeText(ShackActivity.this, "You shake", Toast.LENGTH_LONG).show(); textView.setText("");textView.setText("vvvvvvvvvvvvvv");}});}@Overrideprotected void onDestroy() {super.onDestroy();mShackListener.stop();}}



更多相关文章

  1. Android的常用传感器
  2. [实战示例] 带您深入探讨 Android 传感器【附源码】
  3. android studio中光线传感器解析
  4. Android中传感器Sensor的使用
  5. Android 任务管理器分析小结
  6. CAMERA(12)---[Android相机]光线传感器识别环境光亮强度
  7. 笔记 RelativeLayout:相对布局管理器:
  8. 修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题

随机推荐

  1. Android(安卓)对话框用法
  2. React-Native搭建开发环境-Android-Windo
  3. android studio发布版和测试版证书SHA1获
  4. [Android] Compile a CWM recovery from
  5. Android(安卓)表单模拟,文件上传!
  6. Android三种基本的加载网络图片方式
  7. Android之TabHost
  8. android vm heap 虚拟机堆大小 每个应用
  9. 利用Handler来更新android的UI
  10. [黎活明-传智播客]Android视频教程(保存慢