多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
本篇实现手机的摇一摇功能,并在检测到手机摇动后震动1.5秒。 #### 权限 震动权限 ~~~ <uses-permission android:name="android.permission.VIBRATE" /> ~~~ #### 变量 sensorManager是感应管理器;shakeEnable用来表示是否可以震动,避免在震动过程中继续震动。 ~~~ private SensorManager sensorManager; private boolean shakeEnable = true; ~~~ #### 监听 震动使用Vibrator。 使用的加速度传感器实现的摇一摇功能,阀值设置的加速度是25以上的时候为摇晃了手机,当然这个数值可以修改。 ~~~ /** * 当传感器的精度发生变化时就会调用onAccuracyChanged()方法 * 当传感器监测到的数值发生变化时就会调用onSensorChanged()方法 */ private SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(shakeEnable) { float xValue = Math.abs(event.values[0]); float yValue = Math.abs(event.values[1]); float zValue = Math.abs(event.values[2]); if (xValue > 25 || yValue > 25 || zValue > 25) { shakeEnable = false; //震动1.5s Vibrator vib = (Vibrator) MainActivity.this.getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(1500); //2秒后可以继续摇一摇 new Handler().postDelayed(new Runnable() { @Override public void run() { shakeEnable = true;; } }, 2000); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; ~~~ #### 定义并添加监听 ~~~ sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL); ~~~ #### 销毁 ~~~ @Override protected void onDestroy() { super.onDestroy(); if (sensorManager != null) { sensorManager.unregisterListener(listener); } } ~~~