Java 简易坠落检测

Java 简易坠落检测,java,android,accelerometer,sensors,android-sensors,Java,Android,Accelerometer,Sensors,Android Sensors,我正在尝试做一个简单的秋天检测应用程序。我正在尝试下面的东西- @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //..................... //Creating Sensor Manager SM = (Se

我正在尝试做一个简单的秋天检测应用程序。我正在尝试下面的东西-

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //.....................

    //Creating Sensor Manager
    SM = (SensorManager) getSystemService(SENSOR_SERVICE);

    //Accelerometer Sensor
    sensor = SM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}


@Override
public  void onSensorChanged(final SensorEvent event){
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
        sum = Math.round(Math.sqrt(Math.pow(event.values[0], 2) + Math.pow(event.values[1], 2) + Math.pow(event.values[2], 2)));

        //binding with a possible range
        if (sum <= 20.0){
            min = true;
        }

        if (min == true){
            if (sum >= 40.0){
                max = true;
            }
        }

        if (min == true && max == true){
            SM.unregisterListener(this);
            Toast.makeText(this,"Fall", Toast.LENGTH_SHORT).show();
            //doing other stuff like - countdown timer with alert dialog, sending sms etc.
        }
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//.....................
//创建传感器管理器
SM=(传感器管理器)getSystemService(传感器服务);
//加速度传感器
传感器=SM.getDefaultSensor(传感器类型\加速计);
}
@凌驾
传感器更改时的公共无效(最终传感器事件){
if(event.sensor.getType()==sensor.TYPE\u加速计){
sum=Math.round(Math.sqrt(Math.pow(event.values[0],2)+Math.pow(event.values[1],2)+Math.pow(event.values[2],2));
//绑定到一个可能的范围
如果(总和=40.0){
max=真;
}
}
如果(最小值==true&&max==true){
SM.取消注册侦听器(此);
Toast.makeText(这个“Fall”,Toast.LENGTH_SHORT).show();
//做一些其他的事情,比如-带警报对话框的倒计时,发送短信等等。
}
}
}

我在这方面遇到了一些问题。当一个人把手机放在口袋里摔倒时,它不会给出结果,而在走路(更快)时,它有时会给出错误的结果。为了改善这一点,我应该怎么做,有人能帮我吗

这回答了你的问题吗?你可能需要调整你的阈值。@Froyo我试过了。但是,它对我不起作用。当你在写
sum>=40.0
时,你能告诉我更多关于
调整阈值的信息吗?你是如何得出这个数字的?你认为更小或更高的数字会有帮助吗?也许,与
y索引
相比,您可以为
z索引
添加更多权重。有很多因素。没有直接的答案。