摇一摇demo

package com.example.wuhan.workapplication;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {
    private SensorManager sensorManager;
    private Vibrator vibrator;
    private int sum=0;
    private static final int SENSOR_SHAKE = 10;
    private long LastTime;
    private float lastX,lastY,lastZ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
        vibrator= (Vibrator) getSystemService(VIBRATOR_SERVICE);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(sensorManager != null){
            sensorManager.registerListener(listener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
            // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
        }

    }

    private SensorEventListener listener=new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            long currentUpdateTime=System.currentTimeMillis();
            long TimeJiange=currentUpdateTime-LastTime;
            System.out.println("TimeJiange:"+TimeJiange);
            if(TimeJiange < 100){
                return;
            }
            LastTime=currentUpdateTime;
            // 传感器信息改变时执行该方法 
            float[] values= event.values;
            float x=values[0];
            float y=values[1];
            float z=values[2];

            float deltaX=x-lastX;
            float deltaY=y-lastY;
            float deltaZ=z-lastZ;

            lastX=x;
            lastY=y;
            lastZ=z;

            float delta = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / TimeJiange * 10000);
            System.out.println("delta:"+delta);
            if(delta > 1000){
                vibrator.vibrate(200);
                sum++;
                Message msg=new Message();
                msg.what=SENSOR_SHAKE;
                handler.sendMessage(msg);
            }
            // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。
            /*int medumValue =15;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10
            if(Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue){
                vibrator.vibrate(200);
                sum++;
                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:
                    if(sum==5){
                        sensorManager.unregisterListener(listener);
                    }
                    Toast.makeText(MainActivity.this, "OK"+sum, Toast.LENGTH_SHORT).show();
            }
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        sensorManager.unregisterListener(listener);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值