检测android中的加速度计运动
我正在开发一个应用程序,它需要检测加速计的运动,如震动或将手机向右、向左、向上和向下倾斜,基于这些运动,我将向我的UPnP设备发送一些键 例如,如果检测到右移动,请增加媒体服务器和viceversa的容量 请帮我做这个 我试过一些例子。它在左右两侧都能正常工作。但我需要一个更好的解决方案 我在这里添加代码检测android中的加速度计运动,android,Android,我正在开发一个应用程序,它需要检测加速计的运动,如震动或将手机向右、向左、向上和向下倾斜,基于这些运动,我将向我的UPnP设备发送一些键 例如,如果检测到右移动,请增加媒体服务器和viceversa的容量 请帮我做这个 我试过一些例子。它在左右两侧都能正常工作。但我需要一个更好的解决方案 我在这里添加代码 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.regi
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
lastUpdate = System.currentTimeMillis();
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float[] values = event.values;
// Movement
float x = values[0];
float y = values[1];
float z = values[2];
/*float accelationSquareRoot = (x * x + y * y + z * z)
/ (SensorManager.AXIS_X * SensorManager.AXIS_X);*/
Log.d("Shakes","X: "+x+" Y: "+y+" Z: "+z);
long actualTime = System.currentTimeMillis();
if ((actualTime - lastUpdate) > 100)
{
long diffTime = (actualTime - lastUpdate);
lastUpdate = actualTime;
if(Round(x,4)>8.0000){
Log.d("sensor", "=====LEFT====");
}
else if(Round(x,4)<-8.0000){
Log.d("sensor", "=====RIGHT====");
}
else if(Round(z,4) < -0.0){
Log.d("sensor", "=====UP====");
}
else if(Round(y,4) < 1.0){
Log.d("sensor", "=====DOWN====");
}
float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
//Log.d("sensor", "shake detected w/ speed: " + speed);
//Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
sensorManager=(sensorManager)getSystemService(SENSOR\u SERVICE);
sensorManager.registerListener(此,
sensorManager.getDefaultSensor(传感器类型\加速计),
传感器管理器。传感器延迟(正常);
lastUpdate=System.currentTimeMillis();
@凌驾
传感器更改时的公共无效(传感器事件){
if(event.sensor.getType()==sensor.TYPE\u加速计){
float[]值=event.values;
//运动
浮点x=值[0];
浮动y=值[1];
浮动z=数值[2];
/*浮动加速度平方根=(x*x+y*y+z*z)
/(SensorManager.AXIS_X*SensorManager.AXIS_X)*/
对数d(“摇晃”,“X:+X+”Y:+Y+”Z:+Z);
长实际时间=System.currentTimeMillis();
如果((实际时间-上次更新)>100)
{
long diffTime=(实际时间-上次更新);
lastUpdate=实际时间;
如果(圆形(x,4)>8.0000){
Log.d(“传感器”,“左==”);
}
else if(四舍五入(x,4)抖动_阈值){
//日志d(“传感器”,“检测到震动,速度:”+速度);
//Toast.makeText(这是“检测到的震动w/speed:+速度,Toast.LENGTH_SHORT.show”);
}
最后的x=x;
最后的y=y;
last_z=z;
}
}
}
X轴水平并指向右侧,Y轴垂直并指向上方,Z轴指向屏幕正面的外侧。在该系统中,屏幕后面的坐标具有负Z值
更多细节
在你的情况下,试试这个
if(Round(x,4)>8.0000){
Log.d("sensor", "=====LEFT====");
}
else if(Round(x,4)<-8.0000){
Log.d("sensor", "=====RIGHT====");
}
else if(Round(y,4) < 8.0){
Log.d("sensor", "=====UP====");
}
else if(Round(y,4) < -8.0){
Log.d("sensor", "=====DOWN====");
}
if(圆形(x,4)>8.0000){
Log.d(“传感器”,“左==”);
}
else if(第(x,4)轮if(第(x,4)轮>8.0000){
Log.d(“传感器”,“左==”);
}
else if(圆形(x,4)9&&z<10)
Log.d(“传感器”,“向下==”);
否则如果(z>-10&&z<-9)
Log.d(“传感器”,“向上==”);
hi CapDroid,谢谢你的建议,我试过了,但它会影响用户阈值。我的意思是说用户应该始终以垂直方式握住手机。如果我使用y值,并且如果我以正常可读的方式握住手机,它将始终向上发送运动键。我尝试使用一些准确的值,这些值不会影响e用户恢复手机的正常方式。我正在尝试y和z的组合。仍然没有找到任何好的结果。你能解决你的问题吗??
if(Round(x,4)>8.0000){
Log.d("sensor", "=====LEFT====");
}
else if(Round(x,4)<-8.0000){
Log.d("sensor", "=====RIGHT====");
}
else if (z >9 && z < 10)
Log.d("sensor", "=====DOWN====");
else if (z > -10 && z < -9)
Log.d("sensor", "=====UP====");