Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 加速度计:摇动手机检测器_Android_Accelerometer - Fatal编程技术网

Android 加速度计:摇动手机检测器

Android 加速度计:摇动手机检测器,android,accelerometer,Android,Accelerometer,我用这段代码实现了一个震动运动检测器。但事实上,当我在智能手机上运行它时,它什么都不做。我尝试使用断点进行检查,但它从未进入if(mAccel>12)。 我试着使劲摇晃,但还是认不出来。我认为它需要一些许可,我添加了这一行来显示: <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" /> 我试过galaxy s3和一加一,我忘了什么 specific

我用这段代码实现了一个震动运动检测器。但事实上,当我在智能手机上运行它时,它什么都不做。我尝试使用断点进行检查,但它从未进入if(mAccel>12)。 我试着使劲摇晃,但还是认不出来。我认为它需要一些许可,我添加了这一行来显示:

<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,并且设备可以完全识别它!:)我会尝试打印您可以看到的值。如果期望较长的抖动,可以减小低切滤波器值;如果期望较短的抖动,可以减小期望值。请记住,不同的手机可能或多或少都有灵敏的加速计。