Ski*_*ᴉʞS 25 android accelerator sensor
同样的问题但更好地解释
这个问题被认为是正确的,但它完全没有,我用我的旧设备ZTE尝试了它并且大部分时间工作,但现在我有三星Galazy A5 2016并且它不起作用,在LG G3上都没有.
事情正在尝试使用Accelerometer,有些Sensors我必须能够检测到我在视频上制作的那两个动画中的任何一个.
有两个动作:
我让你来决定,并说服了我什么是更好的选择和EASIER一个做的,具有更好的我的意思是,在大多数设备的工作原理.
Hoa*_*yen 14
固定装置的重力值为+9.81,对应于装置的加速度(0 m/s2减去重力,即-9.81 m/s2).因此,如果装置从静止向下移动,则重力将小于9.81.自由落体装置的重力等于0.
以下是如何确定设备是否开始向下移动.如果设备已经以恒定速度向下移动,则无法确定设备是否向下移动,因为在这种情况下没有向下加速并且重力范数应该在9.81附近.
你需要使用TYPE_GRAVITY.如果设备没有TYPE_GRAVITY,则通过低通滤波器TYPE_ACCELEROMETER获得重力矢量.
如上所述,固定装置将具有标准等于9.81的重力矢量.但是,此值与设备略有不同.因此,您首先需要确定这个固定的重力范数.您可以通过注册TYPE_GRAVITY或TYPE_ACCELEROMETER来执行此操作,并要求用户将设备平放,然后按一个按钮.按下按钮后,应用程序将在onSensorChanged中计算重力的范数.
private float mStationaryGravityNorm;
private float mDeviation = 0.01;
private float mCount;
private boolean mIsCalculatingStationGravityNorm = true;
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener( {
@Override
public void onClick(View v) {
// register sensor
}
});
@Override
public void onSensorChanged(SensorEvent event) {
// Will average out 100 gravity values.
if (mIsCalculatingStationGravityNorm) {
if (mCount++ < 100) {
mStationaryGravityNorm += Math.sqrt(event.values[0] * event.values[0] + event.values[1] * event.values[1] + event.values[2] * event.values[2]);
} else {
mStationaryGravityNorm /= 100;
mIsCalculatingStationGravityNorm = false;
} else {
float gravityNorm = Math.sqrt(event.values[0] * event.values[0] + event.values[1] * event.values[1] + event.values[2] * event.values[2]);
if (gravityNorm < mStationaryGravityNorm - mDeviation) {
// moving down
}
}
Run Code Online (Sandbox Code Playgroud)
PS为了向下移动你需要计算重力.当设备静止时,重力范数约为9.81(取决于设备).现在,如果设备向下移动,则向下加速,因此重力范数将小于9.81,如果设备向上移动,则重力范数将超过9.81.因此,通过将重力范数与此固定重力范数进行比较,您将知道设备是向上还是向下移动.这与设备方向无关.TYPE_GRAVITY将提供更好的准确性,但如果设备没有此类型,则低通滤波器TYPE_ACCELERATOR将为您提供重力矢量.
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |