我已经编写了一种通过网络发送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;
}
}
答案 0 :(得分:1)
最好保存收到的最后一个值,当差值大于定义的阈值时,只保存sendPacket()。