谁能告诉我手机掉了怎么办?
Can anyone tell me how i get toast when mobile falls down?
我正在做一个 android 项目来检测手机何时跌落,谁能告诉我应该在我的应用中使用哪个传感器,我知道加速度计会用于这种目的,但加速度计也可以检测我何时摇动手中的 phone 并且我只想在手机掉落时才吐司。
这是我的代码:
int count = 1;
private boolean init;
private Sensor mySensor;
private SensorManager SM;
private float x1, x2, x3;
private static final float ERROR = (float) 7.0;
private static final float SHAKE_THRESHOLD = 15.00f; // m/S**2
private static final int MIN_TIME_BETWEEN_SHAKES_MILLISECS = 1000;
private long mLastShakeTime;
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
if ((curTime - mLastShakeTime) > MIN_TIME_BETWEEN_SHAKES_MILLISECS) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double acceleration = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)
+ Math.pow(z, 2))
- SensorManager.GRAVITY_EARTH;
Log.d("mySensor", "Acceleration is " + acceleration + "m/s^2");
if (acceleration > SHAKE_THRESHOLD) {
mLastShakeTime = curTime;
Toast.makeText(getApplicationContext(), "FALL DETECTED",
Toast.LENGTH_LONG).show();
} } }}
没有"Fall Sensor",你猜的加速度计是对的。记录并测量跌落时的加速度计数据,并从中扣除一个模型。
你必须使用加速度计。但它会检测到非常小的运动。
唯一的方法是,获得两个读数之间的状态变化差异。
如果它非常非常高,移动距离更长,比如从手中掉下来,或者改变不正常的位置,比如震动。
为此我们必须使用一点物理知识,任何在重力影响下落下的物体都有 9.8 的加速度 m/s/s,向下(在地球上) .所以有了这些知识我们可以得到向下方向的速度
1) 基于轴(Y 轴)使用加速度计检查它是否向下并且
2) 检查它是否等于这个 9.8 m/s 常量并检查
如果下降速度接近 9.8 m/s 祝酒
大家好,这是我自己做的,稍微改变一下就摆脱了这个,就是将两个变量设置为负值,并将它们称为加速度的阈值。
谢谢大家
我正在做一个 android 项目来检测手机何时跌落,谁能告诉我应该在我的应用中使用哪个传感器,我知道加速度计会用于这种目的,但加速度计也可以检测我何时摇动手中的 phone 并且我只想在手机掉落时才吐司。 这是我的代码:
int count = 1;
private boolean init;
private Sensor mySensor;
private SensorManager SM;
private float x1, x2, x3;
private static final float ERROR = (float) 7.0;
private static final float SHAKE_THRESHOLD = 15.00f; // m/S**2
private static final int MIN_TIME_BETWEEN_SHAKES_MILLISECS = 1000;
private long mLastShakeTime;
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
if ((curTime - mLastShakeTime) > MIN_TIME_BETWEEN_SHAKES_MILLISECS) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double acceleration = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)
+ Math.pow(z, 2))
- SensorManager.GRAVITY_EARTH;
Log.d("mySensor", "Acceleration is " + acceleration + "m/s^2");
if (acceleration > SHAKE_THRESHOLD) {
mLastShakeTime = curTime;
Toast.makeText(getApplicationContext(), "FALL DETECTED",
Toast.LENGTH_LONG).show();
} } }}
没有"Fall Sensor",你猜的加速度计是对的。记录并测量跌落时的加速度计数据,并从中扣除一个模型。
你必须使用加速度计。但它会检测到非常小的运动。
唯一的方法是,获得两个读数之间的状态变化差异。
如果它非常非常高,移动距离更长,比如从手中掉下来,或者改变不正常的位置,比如震动。
为此我们必须使用一点物理知识,任何在重力影响下落下的物体都有 9.8 的加速度 m/s/s,向下(在地球上) .所以有了这些知识我们可以得到向下方向的速度
1) 基于轴(Y 轴)使用加速度计检查它是否向下并且
2) 检查它是否等于这个 9.8 m/s 常量并检查
如果下降速度接近 9.8 m/s 祝酒
大家好,这是我自己做的,稍微改变一下就摆脱了这个,就是将两个变量设置为负值,并将它们称为加速度的阈值。 谢谢大家