Android 加速度计:摇动手机检测器
我用这段代码实现了一个震动运动检测器。但事实上,当我在智能手机上运行它时,它什么都不做。我尝试使用断点进行检查,但它从未进入if(mAccel>12)。 我试着使劲摇晃,但还是认不出来。我认为它需要一些许可,我添加了这一行来显示:Android 加速度计:摇动手机检测器,android,accelerometer,Android,Accelerometer,我用这段代码实现了一个震动运动检测器。但事实上,当我在智能手机上运行它时,它什么都不做。我尝试使用断点进行检查,但它从未进入if(mAccel>12)。 我试着使劲摇晃,但还是认不出来。我认为它需要一些许可,我添加了这一行来显示: <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" /> 我试过galaxy s3和一加一,我忘了什么 specific
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
我试过galaxy s3和一加一,我忘了什么
specificeexerciseactivity.java
public class EspecificoExercicio extends Activity {
private ArrayList<Exercicio> listaExercicios;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_especifico_exercicio);
/* do this in onCreate */
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
if (mAccel > 12) {
Toast toast1 = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast1.show();
}
}
/* put this into your activity class */
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
if (mAccel > 4) {
Toast toast1 = Toast.makeText(getApplicationContext(), "DevSSDAASSADA", Toast.LENGTH_LONG);
toast1.show();
}
}
};
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
}
}
公共类专用OEXercio扩展活动{
私有ArrayList Listaexercios;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_specifico_exercio);
/*在onCreate中执行此操作*/
msSensorManager=(SensorManager)getSystemService(Context.SENSOR\u服务);
mSensorManager.registerListener(mSensorListener、mSensorManager.getDefaultSensor(传感器类型\加速计)、SensorManager.Sensor\延迟\正常);
麦塞尔=0.00f;
mAccelCurrent=SensorManager.GRAVITY\u接地;
mAccelLast=传感器管理器。重力与地球;
如果(mAccel>12){
Toast Toast 1=Toast.makeText(getApplicationContext(),“设备已震动”,Toast.LENGTH\u LONG);
toast1.show();
}
}
/*把这个放到你的活动课上*/
私人传感器管理器;
私人浮子mAccel;//重力以外的加速度
私人浮标mAccelCurrent;//包括重力在内的海流加速度
private float mAccelLast;//包括重力在内的最后一次加速度
私有最终SensorEventListener MSSensorListener=新的SensorEventListener(){
传感器更改时的公共无效(传感器事件se){
浮动x=se.值[0];
浮动y=se.值[1];
浮动z=se.值[2];
mAccelLast=MaccellCurrent;
mAccelCurrent=(float)Math.sqrt((double)(x*x+y*y+z*z));
浮动增量=mAccelCurrent-mAccelLast;
mAccel=mAccel*0.9f+delta;//执行低截滤波器
}
精度更改时的公共无效(传感器,int精度){
如果(mAccel>4){
Toast Toast 1=Toast.makeText(getApplicationContext(),“devssdassada”,Toast.LENGTH\u LONG);
toast1.show();
}
}
};
@凌驾
受保护的void onResume(){
super.onResume();
mSensorManager.registerListener(mSensorListener、mSensorManager.getDefaultSensor(传感器类型\加速计)、SensorManager.Sensor\延迟\正常);
}
@凌驾
受保护的void onPause(){
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
}
}
您正在检查onCreate()中的if(mAccel>12)
。将检查移动到onSensorChanged()
仍然相同@sleelight如果在onSensorChanged()中放置断点,是否到达?是@steellight,但它不会进入if。我应该改变值,而不是12,放得更少吗?事实上,我把值改为2,而不是12,并且设备可以完全识别它!:)我会尝试打印您可以看到的值。如果期望较长的抖动,可以减小低切滤波器值;如果期望较短的抖动,可以减小期望值。请记住,不同的手机可能或多或少都有灵敏的加速计。