Android 手机摇一摇功能的实现

package myapplication.com.myapp.activity; public class Home_Activity extends AppCompatActivity{ //传感器 private SensorManager sensorManager; //振动器 private Vibrator vibrator; private TextView tv; private static final int SENSOR_SHAKE = 10; /// @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initView(); } public void initView(){ sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); } /** * 重力感应监听 */ private SensorEventListener sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { // 传感器信息改变时执行该方法 float[] values = event.values; //设备坐标系是固定于设备的,与设备的方向(在世界坐标系中的朝向)无关 float x = values[0]; // x轴方向的重力加速度,向右为正 float y = values[1]; // y轴方向的重力加速度,向前为正 float z = values[2]; // z轴方向的重力加速度,向上为正 Log.i("sensor", "x轴方向的重力加速度" + x + ";y轴方向的重力加速度" + y + ";z轴方向的重力加速度" + z); // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。 int medumValue = 11;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了 if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { //设置震动时长 vibrator.vibrate(200); Message msg = new Message(); msg.what = SENSOR_SHAKE; handler.sendMessage(msg); } } //当传感器精度的改变时 进行的操作 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; /** * 动作执行 */ Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SENSOR_SHAKE: Log.i("sensor", "检测到摇晃,执行操作!"); Intent intents=new Intent(Home_Activity.this,Fankui_Activity.class); intents.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intents); break; } } }; @Override protected void onResume() { super.onResume(); if (sensorManager != null) {// 注册监听器 // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率 sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } } //记得在不用的时候关掉传感器,因为手机黑屏是不会自动关掉传感器的,当然如果你觉得电量一直都很足,那算我多嘴咯。 @Override protected void onStop() { super.onStop(); if (sensorManager != null) {// 取消监听器 sensorManager.unregisterListener(sensorEventListener); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxfyg.html