4.16 Android 感应器实现摇一摇的功能

来源:互联网 发布:淘宝客服操作流程 编辑:程序博客网 时间:2024/04/29 19:11
一定要记住的是,在onDestroy方法里面取消监听器的注册。不然会很耗电的。
package tech.androidstudio.sensordemo;
import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.media.MediaPlayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.Toast;import java.util.List;public class MainActivity extends AppCompatActivity implements SensorEventListener {    private SensorManager mSensorManager;    private Sensor mSensor;    private int mCount;    private long mLastTime;    private long mCurrentTime;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        /*获取手机到底支持多少种的感应器,注意这里的参数时Sensor.TYPE_ALL+++++++++++**/        List<Sensor> sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);        if(sensorList!=null)        for(Sensor sensor:sensorList){            Log.d("Kodulf","Sensor Name"+sensor.getName());            Log.d("Kodulf","Sensor Vender"+sensor.getVendor());            Log.d("Kodulf","Sensor Type"+sensor.getType());            Log.d("Kodulf","+++++++++++++++++");        }        else{            Toast.makeText(this,"No Sensor",Toast.LENGTH_LONG).show();        }        /*获取 手机感应器结束+++++++++++**/        //实现摇一摇得功能        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);        if(mSensor !=null) {            mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_FASTEST);        }else{            //机型适配里面的,硬件适配            Toast.makeText(this,"您的手机不支持",Toast.LENGTH_LONG).show();        }    }    @Override    public void onSensorChanged(SensorEvent event) {        Sensor sensor = event.sensor;        int type = sensor.getType();        switch (type) {            case Sensor.TYPE_ACCELEROMETER:                float[] values = event.values;                //xyz 是加速度,而不是距离。                float x = values[0];                float y = values[1];                float z = values[2];                Log.d("kodulf","Accelerometer x="+x+" y="+y+" z="+z);                yaoYiYao(x,y,z);                break;        }    }    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {    }    /**     * 一定要在onDestroy 里面 进行 取消注册 监听,不然会很耗电的     */    @Override    protected void onDestroy() {        super.onDestroy();        mSensorManager.unregisterListener(this,mSensor);    }    //检测是否 在 摇一摇,如果在x,y,z的 方向 上面有 10次 以上 检测到大于13的加速度的情况,就认为是摇一摇了        public void yaoYiYao(float x,float y,float z){        if(Math.abs(x)>13||Math.abs(y)>13||Math.abs(z)>13){            mCount++;            mCurrentTime = System.currentTimeMillis();            if(mLastTime==0){                mLastTime=mCurrentTime;            }            if(mCount>10&&mLastTime-mCurrentTime<3000){                Toast.makeText(this,"摇一摇了",Toast.LENGTH_LONG).show();                Log.d("kodulf","摇一摇了");                mLastTime=mCurrentTime;                mCount=0;            }        }    }}
0 0
原创粉丝点击