• 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);
            }
        }
    
    
    }
    今天多一点积累,明天少一分烦恼
  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/galibujianbusana/p/6186647.html
Copyright © 2020-2023  润新知