我试图建立它确实当设备被倾斜到一定程度所需影响的应用程序。
我已经采取了看,并成功启用,加速计,但是这并没有给我想要的影响。 就像我说的,我希望设备做什么,我希望它,只有当该设备已取得了一定的程度,说90度。
我有下面的代码,但是当装置倾斜不够快这仅适用:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Sensor mySensor = sensorEvent.sensor;
if (mySensor.getType() == Sensor.TYPE_GYROSCOPE) {
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
long currTime = System.currentTimeMillis();
if ((currTime - lastUpdate) > 100) {
long diffTime = (currTime - lastUpdate);
lastUpdate = currTime;
float speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD && !sound.isPlaying()) {
sound.start();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
此代码最初是用加速度计用,我只是改变了Sensor.TYPE_ACCELEROMETER
到Sensor.TYPE_GYROSCOPE
,希望这会透露给我做什么。
我可能做这样出头?
if (x > 90 || y > 90 || z > 90 && !sound.isPlaying()) {
sound.start();
}
在地方的我
if (speed > SHAKE_THRESHOLD && !sound.isPlaying()) {
sound.start();
}
我试图寻找如何做这样的事情的例子,但无法找到任何东西,甚至对Android开发者...
我想简单的东西,这将使我告诉当设备已经达到了一定的程度或弧度,速度无所谓。
任何帮助将是美好的。
谢谢!
弥敦道
编辑:
我已经做到了这一点:
if (z > 5 || z < -5 || x > 5 || x < -5 && !sound.isPlaying()) {
sound.start();
} else if ( z == 4 || x == 4) {
sound.stop();
sound = MediaPlayer.create(this, R.raw.sound);
}
而这个工程的程度。 一旦Z和X值已越过了“5”的阈值,那么将播放声音。 但是,如果我离开该设备在那个位置,然后,在返回设备返回到起始位置再次启动的声音,因为它仍然是“5”阈值之内。
这不是我一直在寻找的,所以我想我会尝试的东西有点不同:
if (z == 5 || z == -5 || x == 5 || x == -5 && !sound.isPlaying()) {
sound.start();
} else if ( z == 4 || x == 4) {
sound.stop();
sound = MediaPlayer.create(this, R.raw.sound);
}
这并不是在所有的工作。
我希望设备能够检测时,它已经越过的“5”的门槛,但我不希望它能够再次启动的声音,如果它被移动和静止的门槛内。
基本上,我希望设备能够当线路交叉播放声音,而不是当它是行之后的任何一点。 我想,有它寻找时数== 5
将做到这一点,但它似乎无法做到这一点。
停止功能完全不工作的。 如果我使用==
可言,这是行不通的。 有另一种方式我可以编写这一点,Java将能够识别?
请记住,我希望它能够知道该点划线时,输入的面积不得的时候。
干杯!