【发布时间】:2011-12-16 09:03:41
【问题描述】:
我编写了一个通过网络发送 UDP 消息的方法。它工作正常。
之后,我尝试使用我的 Galaxy S 智能手机的加速度计传感器。我得到加速度计值,将它们显示在屏幕上。当值改变时(onSensorChanged 方法),我使用 UDP 将它们发送到我计算机上的应用程序。
问题在于程序总是发送传感器值,而不是在它们更改时发送。 所以,onSensorChanged 方法一直在运行。
我把手机放在桌子上,屏幕上的值是不变的,但它会继续发送。
我该如何解决这个问题?
onSensorChanged 方法:
public void onSensorChanged(SensorEvent event) {
float x,y,z;
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
x=(event.values[0]);
y=(event.values[1]);
z=(event.values[2]);
outputX.setText("x:"+String.format("%.1f",x));
outputY.setText("y:"+String.format("%.1f",y));
outputZ.setText("z:"+String.format("%.1f",z));
sendPacket("192.168.2.40", 10001,
"X:" +String.format("%.1f",x) +
"Y:" +String.format("%.1f",y) +
"Z:" +String.format("%.1f",z));
}
}
发送方法:
public void sendPacket( String ipString, int port,
String message) {
try {
byte[] bytes = null;
bytes = message.getBytes("ASCII");
InetAddress address;
try {
address = InetAddress.getByName(ipString);
} catch (Exception e) {
Log.e("Error","Exception");
return;
}
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
address, port);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
} catch (Exception e) {
Log.e("Error","Exception");
return;
}
}
【问题讨论】:
标签: android accelerometer