android 通过加速度传感器实现手机来电时翻转静音
来源:互联网 发布:海贼王887 知乎 编辑:程序博客网 时间:2024/06/08 06:06
实现思路
- 通过加速度传感器获取 X,Y,Z 三轴所受的重力
- 计算在指定的时间段内,手机在 X,Y,Z 矢量和的方向上的速度
- 如果速度大于指定的速度阀值,判定手机当前在剧烈抖动;并结束当前方法
- 通过Z轴的改变判断手机是否发生反转,如果是调用AudioManager的
setRingerMode(AudioManager.RINGER_MODE_SILENT)
方法使手机静音
代码
public class MainActivity extends AppCompatActivity { SensorManager mSensorManager = null; AccelerometerSilentListener mAccelerometerSilentListener = null; AudioManager mAudioManager = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mAccelerometerSilentListener = new AccelerometerSilentListener(); mSensorManager.registerListener(mAccelerometerSilentListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onDestroy() { super.onDestroy(); if (mSensorManager != null) { mSensorManager.unregisterListener(mAccelerometerSilentListener); } } private class AccelerometerSilentListener implements SensorEventListener { private static final int SPEED_LIMIT = 800; //速度阀指 private static final int UPDATE_INTERNAL_TIME = 60; //两次取样时间差 private long lastTime = 0; private float lastX = 0; private float lastY = 0; private float lastZ = 0; private boolean isUp = false; @Override public void onSensorChanged(SensorEvent event) { long currentTime = System.currentTimeMillis(); float internalTime = currentTime - lastTime; if (internalTime < UPDATE_INTERNAL_TIME) { return; } lastTime = currentTime; float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float deltaX = x - lastX; float deltaY = y - lastY; float deltaZ = z - lastZ; lastX = x; lastY = y; lastZ = z; double speed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ) / internalTime * 10000; //算出后速度为 mm/s if (speed > SPEED_LIMIT) { return; } if (x > -1 && x < 1 && y > -1 && y < 1) { if (z > 0) { isUp = true; } else { isUp = false; } } else { if (z > -10f && z < -9.6f && isUp) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); } else if (z > 9.6f && z < 10f && !isUp) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }}
0 0
- android 通过加速度传感器实现手机来电时翻转静音
- Android 来电翻转手机静音
- Android 来电翻转静音实现源码
- 手机来电翻转静音功能
- android 利用重力感应监听 来电时翻转手机后静音。
- android手机加速度传感器
- Android通过手机的传感器计算手机的移动加速度
- 让Android手机黑名单来电实现自动静音
- Android加速度传感器实现“摇一摇”,带手机振动
- android加速度传感器简单实现
- android L平台增加来电翻转静音菜单、功能
- android 5.1中添加来电翻转静音的功能
- android L平台增加来电翻转静音菜单、功能
- Android实现手机静音
- android 手机加速度传感器的问题
- android 手机加速度传感器的问题
- 手机翻转静音
- 设置手机静音和固定电话来电时手机震动
- 1031. 查验身份证(15)
- 使用hubble.net实施全文搜索笔记
- 你所不知道的事儿--C++中delete指针后最好赋值为NULL
- SCU-4438 Censor(KMP算法)
- Matrix
- android 通过加速度传感器实现手机来电时翻转静音
- bash 变量
- [刷题]算法竞赛入门经典(第2版) 5-3/UVa10935 - Throwing cards away I
- 面试漫谈参考
- 算法导论习题(9)
- 多校10
- java语言的历史
- 用户特征工程 超详细解读
- C++--堆和栈详解