一定要记住的是,在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; //x,y,z 是加速度,而不是距离。 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; } } } }
4.16 Android 感应器实现摇一摇的功能
最新推荐文章于 2024-07-16 13:53:11 发布
本文详细介绍了如何在Android应用中实现摇一摇触发的功能,通过获取手机的加速度传感器数据,当检测到一定次数且方向上的加速度超过阈值时,触发特定操作,如显示提示消息。
1339

被折叠的 条评论
为什么被折叠?



