Android Accelerometer:onSensorChanged始终运行

时间:2011-12-16 00:28:01

标签: android accelerometer

我已经编写了一种通过网络发送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;
        }

}

1 个答案:

答案 0 :(得分:1)

最好保存收到的最后一个值,当差值大于定义的阈值时,只保存sendPacket()。